Patch package OTP 29.0-rc2 Released

OTP 29.0-rc2

Erlang/OTP 29.0-rc2 is the second release candidate of three before the OTP 29.0 release.

The intention with this release is to get feedback from our users.
All feedback is welcome, even if it is only to say that it works for you.
We encourage users to try it out and give us feedback either by creating an issue at
https://github.com/erlang/otp/issues or by
posting to Erlang Forums.

All artifacts for the release can be downloaded from the
Erlang/OTP Github release
and you can view the new documentation at
https://erlang.org/documentation/doc-17.0-rc2/doc.
You can also install the latest release using kerl like this:

kerl build 29.0-rc2 29.0-rc2.

Erlang/OTP 29 is a new major release with new features, improvements
as well as a few incompatibilities. Some of the new features are
highlighted below.

Many thanks to all contributors!

Highlights for RC2

  • The module io_ansi allows the user to emit Virtual Terminal
    Sequences (also known as ANSI sequences) to the terminal in order to
    add colors/styling to text or to create fully fledged terminal
    applications.

  • The new ct_doctest module allows the user to test
    documentation examples in Erlang module docs and documentation files.

  • The ignore_xref attribute has been handled as a post-analysis
    filter by build tools such as Rebar3. In this release, [xref]
    itself does the filtering, ensuring that all tooling that calls
    xref for any purpose can rely on these declarations to just work.

Highlights for RC1

General

  • In the default code path for the Erlang system, the current working
    directory (.) is now in the last position instead of the first.

  • There is no longer a 32-bit Erlang/OTP build for Windows.

New language features

  • Native records as described in
    EEP-79 has been
    implemented. A native record is a data structure similar to the
    traditional tuple-based records, except that is a true data type.
    Native records are considered experimental in Erlang/OTP 29 and
    possibly also in Erlang/OTP 30.

  • The new is_integer/3 guard BIF makes it possible to easily verify
    that a value is both an integer and within a certain range. For
    example: is_integer(I, 0, 100)

  • Multi-valued comprehensions according to EEP 78
    are now supported. For example, [-I, I || I <- [1, 2, 3]] will produce
    [-1,1,-2,2,-3,3].

  • By enabling the compr_assign feature, it is now possible to bind variables
    in a comprehensions. For example:
    [H || E <- List, H = erlang:phash2(E), H rem 10 =:= 0]

Compiler and JIT improvements

  • In the documentation for the [compile] module, there is now a section
    with recommendations for implementors of languages running on
    the BEAM.

  • The JIT now generates better code for matching or creating binaries with
    multiple little-endian segments.

  • The compiler will generate more efficient code for map
    comprehensions with constant values that don’t depend on the
    generator. Example: #{K => 42 || K <- List}

Compiler warnings

There are several new compiler warnings enabled by default. For each
such warning, there is an option to disable it.

  • There will now be a warning when using the catch operator, which
    has been deprecated for a long time. It is recommended to instead
    use trycatch but is also possible to disable the warning
    by using the nowarn_deprecated_catch option.

  • There will now be a warning when exporting variables out of a
    subexpression. For example: file:open(File, AllOpts = [write, {encoding,utf8}]). This warning can be disabled using the
    nowarn_export_var_subexpr compiler option.

  • The compiler will now warn for uses of the and and or
    operators. This warning can be disabled using the
    nowarn_obsolete_bool_op compiler option.

  • The compiler will now warn for matches such as {a,B} = {X,Y},
    which is better written as {a=X,B=Y}. This warning can be disabled
    using the nowarn_match_alias_pats option.

For a long time, there has been a warning for using the obsolete guard
tests (such as list(L) instead of is_list(L). In Erlang/OTP 30, the
old guards will be removed from the language.

STDLIB

  • There are new functions for randomly permutating a list: rand:shuffle/1 and
    rand:shuffle_s/2.

SSH

  • The default key exchange algorithm is now mlkem768x25519-sha256, a hybrid
    quantum-resistant algorithm combining ML-KEM-768 with X25519. This provides
    protection against both classical and quantum computer attacks while
    maintaining backward compatibility through automatic fallback to other
    algorithms when peers don’t support it.
3 Likes