Elixir v1.20.0-rc.5

v1.20.0-rc.5Pre-release
Added 3
  • Add occurrence typing on `case`, `cond`, and `with`
  • Add `source/1` to IEx.Helpers
  • Add `mix source MODULE` to print or open a given module/function location
Changed 12
  • Optimize Base validation functions by using SWAR techniques
  • Optimize `Float.round/2` by avoiding big integers
  • Increase inspect limit to help print deeply nested data structures
  • Support printing Erlang records using Erlang notation
  • Switch Registry `{:duplicate, :key}` key_ets to ordered_set with composite keys
  • SWAR-optimize ASCII fast paths in `String.length/1` and `String.slice/3`
Fixed 5
  • Fix a compiler crash when importing a module with `only: :sigils` option when the imported module exports non-sigil symbols with `sigil_` prefix
  • Reject negative Duration in `to_timeout/1`
  • Fix generation of heredocs in `Macro.to_string/1` with escaped trailing newline
  • Consistently return path as binary in `Path.relative_to_cwd/2`
  • Raise in `Stream.cycle/1` when enumerable reduce call yields no elements

This release requires Erlang/OTP 27+ and is compatible with Erlang/OTP 29.

1. Enhancements
EEx
  • [EEx] Optimize compiler by flattening expr list only once
Elixir
  • [Base] Optimize Base validation functions by using SWAR techniques
  • [Float] Optimize Float.round/2 by avoiding big integers
  • [Inspect] Increase inspect limit to help print deeply nested data structures
  • [Inspect] Support printing Erlang records (using Erlang notation)
  • [Kernel] Add occurrence typing on case, cond, and with
  • [Registry] Switch {:duplicate, :key} key_ets to ordered_set with composite keys
  • [String] SWAR-optimize ASCII fast paths in String.length/1 and String.slice/3
ExUnit
  • [ExUnit] Show remaining runs when using --repeat-until-failure
IEx
  • [IEx.Helpers] Add source/1
Mix
  • [mix app.tree] Support --output option
  • [mix deps.tree] Support --output option
  • [mix help] Support printing docs for types and callbacks
  • [mix format] Support --no-compile option
  • [mix source] Add mix source MODULE to print or open a given module/function location
2. Potential breaking changes
Elixir
  • [Kernel] Disallow raw CR line ending in strings, comments and after ? for security reasons
3. Bug fixes
Elixir
  • [Kernel] Fix a compiler crash when importing a module with only: :sigils option when the imported module exports non-sigil symbols with sigil_ prefix
  • [Kernel] Reject negative Duration in to_timeout/1
  • [Macro] Fix generation of heredocs in Macro.to_string/1 with escaped trailing newline
  • [Path] Consistently return path as binary in Path.relative_to_cwd/2
  • [Stream] Raise in Stream.cycle/1 when enumerable reduce call yields no elements
  • [String] Support empty pattern list in String.count/2
Logger
  • [Logger] Persist log level to app env in Logger.configure/1
Mix
  • [Mix] Use non_executable_binary_to_term on loopback pubsub
  • [mix compile.elixir] Fix scenario where Elixir would tag mtimes in the future
View original

Upgraded? How did it go?

Discussion