Notes from ElixirConf 2021 - What's Now and What's Next
Bendyworks is dipping it's collective toes in the Elixir waters. Several of us have been reading, taking courses and building practice apps to become proficient at writing Elixir and using the Phoenix framework. This activity includes sending a contingent to ElixirConf 2021. Well, not so much sending given we went to the virtual version. Exciting things are happening all over the Elixir community. This post is going to try to hit the highlights for those who couldn't attend.
Elixir and Phoenix have matured significantly over the last couple of years. Seeing an emphasis on developer experience just reinforces the general feeling that Elixir and Phoenix are a practical and speedy way to build the custom software our clients are looking for.
As a relative newbie I appreciate the time and effort that has gone into the documentation for Elixir and related projects. It's fantastic to see the documentation as a first class part of the project repo. Nicholas Henry presented a talk entitled "Preventing Brain Freeze: Onboarding New Developers to your in-house Elixir Application" linked demo project that demonstrated just how useful and relatively easy it is to integrate docs into your elixir project. I got a chuckle out of his "ReadMe Driven Development" phrase. He means more than just a root level getting-started document. I don't love writing documentation but love reading good docs. Making writing them a more seamless part of the development flow feels like a big win to me.
Several speakers mentioned (Livebook)[https://github.com/livebook-dev/livebook]. It is inspired by Jupyter Notebooks and Deepnote, and like Jupyter is aimed at data exploration and machine learning. But like Jupyter, it makes a great platform for internal documentation. It combines markdown and executable Elixir code blocks that let the reader not only learn from the docs but try out the system being documented right in the ReadMe.
Jose Valim in his keynote showed the continuous improvements the team has been putting into project compilation. As of Elixir 1.12, any change to config or dependencies would require a full project recompile. That was a significant improvement over previous versions. Starting in version 1.13 (coming in November), the compilation step will need to recompile even fewer files by checking file hashes instead of modification times. You can hear all about it in this Thinking Elixir Podcast episode.
Another tool improvement is around dependency management.
mix xref itself is not new, but several flags have been added to help visualize where the linkages are and how they affect compilation.
Code completion is something developers are relying on more and more as we work at higher levels of abstraction. Having our editor suggest what we might be thinking can prevent typos and often remind us of useful language functionality that has temporarily slipped our minds. Parsers are great at dealing with files or whole blocks but don't work as well on incomplete code fragments. The Code.Fragment library fills this gap and is usable by editors, Livebook and iex alike.
Opinions abound about how code should be formatted. I of course have my own preferences. The computer really does't care what the code looks like, but I do. When I come back to it in a few months and want to figure out what it is supposed to do, having a consistent format is essential. The code formatter was introduced in version 1.6 and has gotten some very useful upgrades lately. The biggest improvement is the addition of plugins. Now libraries that have their own sigils can provide formatters for those sigils. If this catches on we may need sigils of more than 1 character.
Elixir is stable, so don't expect any significant changes to the language. However, there's still lots to do. You can expect new releases every 6 months. The current focus on tooling will continue so we can look forward to continued quality of life and efficiency improvements in the coming years. As is often the case for the Elixir project, release documentation is excellent. You can find a nice summary and a complete list in the changelog.