Erlang/OTP 29.0 – Erlang/OTP

✨ Discover this trending post from Hacker News 📖

📂 **Category**:

✅ **What You’ll Learn**:

OTP 29.0 #

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!

  • Added support for -unsafe attributes for marking
    functions as unsafe to use. The compiler will by default now
    generate warnings for calls to functions in Erlang/OTP known to be
    always unsafe. Furthermore, xref can now be used to find calls to
    unsafe functions and functions that lack documentation.

  • The SSH daemon now defaults to disabled for shell and exec services,
    implementing the “secure by default” principle. This prevents
    authenticated users from executing arbitrary Erlang code unless
    explicitly configured.

  • The SFTP subsystem is no longer enabled by default when starting an
    SSH daemon.

  • In SSL, the post quantum hybrid algorithm x25519mlkem768 is now the
    most preferred key exchange group in the default configuration.

  • 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.

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

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,
    ⚡])
    . 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 ⚡ = 💬,
    which is better written as 💬. 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.

For a full list and more details about new features and potential incompatibilities see the README.

{💬|⚡|🔥} **What’s your take?**
Share your thoughts in the comments below!

#️⃣ **#ErlangOTP #ErlangOTP**

🕒 **Posted on**: 1778907734

🌟 **Want more?** Click here for more info! 🌟

By

Leave a Reply

Your email address will not be published. Required fields are marked *