Jose Valim, creator of Elixir, presents key updates for Elixir 1.19, focusing on significant performance enhancements and advancements in the language's type system. The update introduces up to four times faster build times for large projects through lazy module loading and parallel dependency compilation, addressing bottlenecks in the code server. The Elixir type system continues its steady evolution, now supporting a wider range of data types (including maps with any keys and anonymous functions) and language constructs (protocols and their implementations), leading to more precise bug detection and clearer warning messages without requiring code changes. Valim also discusses community feedback on the ongoing Elixir 1.19 Release Candidate, notably a partial rollback and enhancement of the struct update syntax based on developer usability, and ongoing work to ensure compatibility with Erlang/OTP 28's regex changes. The talk concludes by highlighting community initiatives like the Elixir Outreaches Stipend and the Global Elixir Meetup, and a surprise announcement of the public availability of the Elixir Language Server for early testing and contributions.
Elixir 1.19 Updates: Compile Time, Type System, and Community Initiatives
0:51 Elixir 1.19 Overview: Jose Valim introduces Elixir 1.19, detailing compile time improvements, type system updates, the current release candidate status, and community initiatives.
1:20 Compile Time Improvements: Elixir 1.19 delivers up to four times faster build times for large projects, building on previous optimizations like caching file system lookups and decentralizing code server work.
4:16 Lazy Loading of Modules: A significant improvement comes from lazily loading compiled modules, which alone yields a two-times speedup for large projects, particularly on multi-core machines, by reducing contention on the Erlang code server.
5:42 Parallel Dependency Compilation: A new environment variable, MIX_DEPS_COMPILE_PARTITION_COUNT, allows for parallel compilation of dependencies, potentially speeding up dependency builds by up to four times for projects with non-concurrent build processes (e.g., downloading artifacts, using Makefiles). It is recommended to set this value to half the number of CPU cores.
8:40 Type System Evolution: The Elixir type system continues to expand, building on previous releases (1.17 for basic types, 1.18 for lists, tuples, and pattern inference).
10:16 Elixir 1.19 Type System Enhancements: Now supports maps with any keys, anonymous functions, and type checking of protocols and their implementations, leading to more robust bug detection and clearer warnings (e.g., for String.Chars protocol violations).
12:00 Type System Milestones: The type system is currently in its first milestone: "type inference from patterns and guards," aiming to find bugs for free without requiring explicit type annotations.
14:27 Elixir 1.19 Release Candidate Feedback: The current RC is the longest yet due to valuable community feedback across three areas: type system performance/warnings, deprecation of struct update syntax, and Erlang/OTP 28 support.
18:11 Enhanced Struct Update Syntax: Initially deprecated for its redundant role with the type system, the struct update syntax will be partially rolled back and enhanced to serve as a type assertion for developers (requiring explicit pattern matching before updating).
19:42 Erlang/OTP 28 Regex Support: Elixir's handling of regular expressions with Erlang/OTP 28 is being addressed. New APIs are being added to OTP 28.1 to ensure seamless compatibility with Elixir 1.19, as OTP 28's modernized regex engine changes serialization behavior.
20:41 Elixir Outreaches Stipend: A new program to fund community members speaking about Elixir at other technology conferences.
21:48 Global Elixir Meetup: Scheduled for September 22-28, encouraging local meetups around the world, even informal ones, to foster idea exchange.
23:50 Surprise: Elixir Language Server Publicly Available: The Elixir Language Server (elixir_ls) is now publicly available on GitHub in alpha status for early testing, feedback, and contributions, thanks to a dedicated team and sponsors.
25:45 Q&A - Package Maintenance: A question addresses community concerns about package maintenance and transfer of ownership; Jose recommends community discussion and awareness of existing hex.pm mechanisms.
28:42 Q&A - Dialyzer's Future: Jose indicates that the evolving Elixir type system is expected to diminish the value of Dialyzer over time.