Elixir
Elixir v1.19.0-rc.1 released
1. Enhancements
Elixir
- [Kernel] Raise when U+2028 and U+2029 characters are present in comments and strings to avoid line spoofing attacks
- [Kernel] Include the line for the previous clause in errors/warnings related to conflicts between defaults on function definitions
- [Macro] Add
__escape__/1callback so structs can escape references and other runtime data types inMacro.escape/1 - [OptionParser] Support the
:regextype - [OptionParser] Enhance parsing error to display available options
- [String] Update to Unicode 17.0.0
ExUnit
- [ExUnit] Set a process label for each test
Logger
- [Logger] Accept any enumerable in
Logger.metadata/1
Mix
- [mix format] Add options to mix format to allow excluding of files
- [mix test] Add
--name-patternoption tomix test - [Mix.install/2] Support the
:compilersoption
2. Bug fixes
Elixir
- [Code] Return error on invalid unicode sequences in
Code.string_to_quoted/2instead of raising - [Code] Properly handle column annotation for
ininnot inexpressions - [Enum] Fix infinite loop on
Enum.take/2with negative index on empty enumerable - [Inspect] Inspect ill-formed structs as maps
- [Kernel] Properly increment metadata newline when
?is followed by a literal newline character
ExUnit
- [ExUnit.Assertions] Fix order in ExUnit results when listing pinned variables
- [ExUnit.Assertions] Raise if attempting to raise an assertion error with invalid message (not a binary)
IEx
- [IEx] Abort pipelines when there is an error in any step along the way
Mix
- [mix compile] Fix bug where reverting changes to an external resource (such as HEEx template) after a compilation error would make it so the source module would not be compiled
- [mix compile] Avoid failures when locking compilation across different users
- [mix compile] Fix race condition when renaming files used by the compilation lock
- [mix test] Prevent
mix testfrom overriding:failures_manifest_pathoption
3. Hard deprecations
Elixir
- [Code] Warn if line-break characters outside of
\rand\r\nare found in strings according to UX#55. This warning will be fast-tracked into an error for security reasons in Elixir v1.20, following a similar rule to bidirectional control characters. They will already raise if found in comments
Most Liked
josevalim
Alright folks, in a nutshell, this release addresses all feedback from the previous RC:
- Fully compatible with Erlang/OTP 28.1+
- Struct update syntax has been adapted into a type assertion operator
- Addresses issues with certain dependencies taking too long to compile
Please give it a try, so we can finally ship v1.19!
frankdugan3
Just want to share the performance gains on deps compilations for my large day-job project on an AMD Ryzen 9 5900X 12-Core Processor:
mix deps.compile --force
frank@…git/hsm/main on main [✘!?⇡] via 💧 v1.18.4 (OTP 27) took 2m20s
mix compile --force
Compiling 569 files (.ex)
frank@…git/hsm/main on main [✘!?⇡] via 💧 v1.18.4 (OTP 27) took 18s
mix deps.compile --force
mix deps.compile running across 24 OS processes
frank@…git/hsm/main on main [✘!?⇡] via 💧 v1.19.0-rc.1 (OTP 28) took 55s
mix compile --force
Compiling 569 files (.ex)
frank@…git/hsm/main on main [✘!?⇡] via 💧 v1.19.0-rc.1 (OTP 28) took 19s
Great work, team! ![]()
josevalim
@Eiji it is fine to put just a snippet asking if someone else ran into the same issue. It helps in case the issue is known so they don’t have to dig deeper.
In this case, however, this issue is not known, so we would indeed need a reproduction.
Thank you @hkrutzer, @Eiji and everythone else helping us catch the remaining bugs.
sabiwara
Linking your issue here for the record since you did manage to reproduce it (thank you!)
Eiji
Oh, looks like you get it wrong. Of course, it’s fine to ask a simplest question, so we can ask about details later (unless mods would give us more strict rules). Maybe it was just my intuition, but it did not look like something that’s so “easy to solve” (as explained above).
I was online, so I could spend let’s say 5 min on accepting invite and investigate problem. I did things like that before mostly for Elixir core and credo. I’m more than fine doing such a small things even for free as I like testing new changes in Elixir and if someone would find me helpful and offer me a contract it would be a nice bonus.







