Episode 60
Compile Faster with Marc-André Lafortune
August 17th, 2021
43 mins 2 secs
About this Episode
We talk with Marc-André Lafortune about reducing Elixir project compile times. On larger projects, when a single file like a view template is changed and over 100 files get recompiled, there is something wrong. Marc-André explains how he identified the problems in his project and contributed to Elixir’s mix xref tool making it easier for us to find those problems in our own projects! We cover how these tooling improvements were used to improve the upcoming Phoenix 1.6 and Elixir 1.13! An additional mix xref flag was added to run CI checks on our code to prevent accidentally adding code that slows our compile times.
Show Notes online - http://podcast.thinkingelixir.com/60
Elixir Community News
- https://insights.stackoverflow.com/survey/2021#most-loved-dreaded-and-wanted-language-love-dread – Elixir is number 4 among the "most loved" languages on Stack Overflow's developer survey
- https://insights.stackoverflow.com/survey/2021#section-top-paying-technologies-top-paying-technologies – Elixir is number 3 in highest paid languages on Stack Overflow's developer survey
- https://github.com/nvim-treesitter/nvim-treesitter/pull/1645 – Neovim adds tree-sitter (a syntax parser) support for the Surface library
- https://github.com/surface-ui/surface_tailwind/issues/1#issuecomment-884981076 – Surface Catalogue to continue and may redesign the UI using TailwindCSS
- https://github.com/phoenixframework/phoenix/issues/4403#issuecomment-895354673 – Phoenix 1.6 possibly released this week?
Do you have some Elixir news to share? Tell us at @ThinkingElixir or email at show@thinkingelixir.com
Discussion Resources
- https://twitter.com/josevalim/status/1421912595456569351 – Thread talks about the change
- https://groups.google.com/g/elixir-lang-core/c/Hmg5y8S3v4E/m/FVK50RWBAQAJ?pli=1 – Elixir core mailing list where feature was discussed
- https://hexdocs.pm/mix/master/Mix.Tasks.Xref.html#module-understanding-the-printed-graph
- https://github.com/elixir-lang/elixir/pull/11044 – Add "--label compile-connected" option to mix xref graph
- https://github.com/elixir-lang/elixir/pull/11048 – Add "--fail-above" option to mix xref making it good for CI systems
- https://github.com/elixir-lang/elixir/pull/11049 – Support multiple sinks and sources in mix xref graph
- https://github.com/elixir-lang/elixir/pull/11162 – Update docs
- https://github.com/elixir-lang/elixir/pull/11080 – Rely on modification time and hash to determine modified sources
- https://dashbit.co/blog/speeding-up-re-compilation-of-elixir-projects – Blog post on recompilations
- https://github.com/phoenixframework/phoenix/issues/4408 – Example 1 of sneaky macros introducing compile-time dependencies
- https://github.com/phoenixframework/phoenix/issues/4409 – Example 2 of sneaky macros introducing compile-time dependencies
- https://exercism.io/tracks/elixir
- https://github.com/rbenv/rbenv
- https://rvm.io/
- https://www.super.mx/
- https://xkcd.com/303/
--label compile-connected
--fail-above
Guest Information
- https://twitter.com/malafortune – on Twitter
- https://github.com/marcandre/ – on Github
- http://blog.marc-andre.ca/ – Blog
Find us online
- Message the show - @ThinkingElixir
- Email the show - show@thinkingelixir.com
- Mark Ericksen - @brainlid
- David Bernheisel - @bernheisel
- Cade Ward - @cadebward