✨ 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
-unsafeattributes 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,xrefcan 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_ansiallows 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_doctestmodule allows the user to test
documentation examples in Erlang module docs and documentation files. -
The
ignore_xrefattribute 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
xreffor 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/3guard 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_assignfeature, 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
catchoperator, which
has been deprecated for a long time. It is recommended to instead
usetry…catchbut is also possible to disable the warning
by using thenowarn_deprecated_catchoption. -
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_subexprcompiler option. -
The compiler will now warn for uses of the
andandor
operators. This warning can be disabled using the
nowarn_obsolete_bool_opcompiler option. -
The compiler will now warn for matches such as
⚡ = 💬,
which is better written as💬. This warning can be disabled
using thenowarn_match_alias_patsoption.
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/1and
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! 🌟
