Elixir v1.18.4 released

This release includes initial support for Erlang/OTP 28, for those who want to try it out. In such cases, you may use Elixir v1.18.4 precompiled for Erlang/OTP 27, as it is binary compatible with Erlang/OTP 28. Note, however, that Erlang/OTP 28 no longer allows regexes to be defined in the module body and interpolated into an attribute. If you do this:

@some_attribute ~r/foo/
def some_fun, do: @some_attribute

You must rewrite it to:

def some_fun, do: ~r/foo/

1. Enhancements

IEx

  • [IEx.Helpers] Add IEx.Helpers.process_info/1 which prints process information

Mix

  • [mix compile] Support the --no-listeners option
  • [mix local] Retry HTTP requests with disabled middlebox comp mode depending on the failure reason
  • [mix local.hex] Install Hex per OTP release
  • [mix local.rebar] Install Hex per OTP release
  • [mix run] Support the --no-listeners option

2. Bug fixes

Elixir

  • [Kernel] Emit trace events for @on_definition callbacks
  • [Kernel] Emit trace events for @on_load callbacks
  • [Kernel] Emit trace events for super calls
  • [Kernel] Emit trace events for imported function calls
  • [Kernel] Optimize map unions to avoid building long lists
  • [Kernel] Do not crash when type checking nested bitstrings in patterns
  • [Kernel] Do not crash when non-binary bitstring is given as struct default value
  • [Kernel] Recompile regexes when escaped from module attributes for Erlang/OTP 28 compatibility
  • [Kernel] Preserve backwards compatibility in elixir_erl

Mix

  • [mix deps.get] Ensure git checkout works when there are untracked files in the dependency
  • [mix loadpaths] Do not run listeners when not checking the deps
35 Likes

Congratulations!

For those of you who want to try Elixir 1.18.4 w/ OTP 28 and uses igniter package, the compilation is broken because igniter depends on GitHub - nurugger07/inflex: An Inflector library for Elixir that uses regexps in module constants all over the place.

3 Likes

I think I made a decent fix for Inflex, now we just wait and see if upstream accepts it.

6 Likes

Thanks, and I already incorporated your fix into igniter, since inflex doesn’t seem to be actively maintained.

2 Likes

We’ve made a new release of igniter that does not depend on inflex. Thanks @vkryukov for the PR, igniter should be good to go with OTP 28.

10 Likes

Hey :waving_hand:

For the curious ones, I think this is the relevant release note about this breaking change:

  • Compiled Patterns Should Not be Shared: Sharing the result of re:compile/2 across node boundaries or persisting it has never been officially supported, although it might have accidentally worked between certain previous versions. The internal format produced by re:compile/2 has changed, and will not work on older OTP versions or across nodes. Relying on this undocumented behavior must be changed to compile the regular expression on the node instance where it is intended to be used.

That’s interesting how defining regexes in the module body is so popular in the Elixir community, but it works only by “accident” :sweat_smile:.

2 Likes

Yeah in Ash we have something like this:

attribute :email, :string do
  constraints [match: ~r/@/]
end

and

validate match(:email, ~r/@/)

all of which need to change now to support functions being provided :sob:.

3 Likes

Update: future releases will support strings instead, and will warn on a regex being provided. i.e constraints match: "@", and a string being provided will be treated as a regex.

5 Likes