Erlang/OTP 26.0 Release Candidate 2
Erlang/OTP 26.0-rc2 is the second release candidate of three before the OTP 26.0 release. The release candidate 2 fixes some bugs found in the first release candidate and there are also a few additional features.
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 here https://github.com/erlang/otp/issues or by posting to Erlangforums.
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-14.0-rc2/doc/. You can also install the latest release using kerl like this: kerl build 26.0-rc2 26.0-rc2.
Erlang/OTP 26 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!
Below are some highlights of the release:
Leexhas been extended with optional column number support.
- The family of enumeration functions in module
listshas been extended with
enumerate/3that allows a step value to be supplied.
- Update Unicode to version 15.0.0.
proc_lib:start*/*has become synchronous when the started process fails. This requires that a failing process use a new function
proc_lib:init_fail/2,3, or exits, to indicate failure. All OTP behaviours have been fixed to do this.
- Added the new built-in type
dynamic()introduced in EEP 61, PR introducing EEP 61 improving support for gradual type checkers.
- Change the client default
verify_peer. Note that this makes it mandatory to also supply trusted CA certificates or explicitly set
verify_none. This also applies when using the so called anonymous test cipher suites defined in TLS versions pre TLS-1.3.
There are a lot of new features and improvements in the Erlang shell:
- auto-complete of variables, record names, record fields names, map keys, function parameter types and filenames.
- Open external editor in the shell to edit the current expression.
- defining records (with types), functions, specs and types in the shell.
- The TTY/terminal subsystem has been rewritten.
Windows users will notice that
erl.exehas the same functionality as a normal Unix shell and that
werl.exeis just a symlink to
erl.exe. This makes the Windows Erlang terminal experience identical to that of Unix.
Compiler and JIT optimizations:
Creation and matching of binaries with segments of fixed sizes have been optimized.
Creation and matching of UTF-8 segments have been optimized.
Appending to binaries has been optimized.
The compiler and JIT now generate better code for creation of small maps where all keys are literals known at compile time.
Thanks to the optimizations above the performance of the
base64module has been significantly improved. For example, on an x86_64 system with the JIT both encode and decode are almost three times faster than in Erlang/OTP 25.
Map comprehensions as suggested in EEP 58 has now been implemented.
Some map operations have been optimized by changing the internal sort order of atom keys. This changes the (undocumented) order of how atom keys in small maps are printed and returned by
maps:next/1. The new order is unpredictable and may change between different invocations of the Erlang VM.
Introducing the new function
maps:iterator/2for creating an interator that return the map elements in a deterministic order. There are also new modifiers
Kfor the format string in
io:format()to support printing map elements ordered.
- Dialyzer has a new incremental mode that be invoked by
--incrementaloption when running Dialyzer. This new incremental mode is likely to become the default in a future release.
Misc ERTS, Stdlib, Kernel, Compiler
Multi time warp mode is now enabled by default. This assumes that all code executing on the system is time warp safe.
Support for UTF-8 atoms and strings in the NIF interface including new functions
max/2are now allowed to be used in guards and match specs.
Improved the selective receive optimization, which can now be enabled for references returned from other functions. This greatly improves the performance of
gen_server:wait_response/2, and similar functions.
New trace feature
call_memory. Similar to
call_timetracing, but instead of measure accumulated time in traced functions it measures accumulated heap space consumed by traced functions. It can be used to compare how much different functions are contributing to garbage collection being triggered.
It is no longer necessary to enable a feature in the runtime system in order to load modules that are using it. It is sufficient to enable the feature in the compiler when compiling it.
inet:setopts/2has got 3 new options:
Fix so that
-fno-omit-frame-pointeris applied to all of the Erlang VM when using the JIT so that tools, such as
perf, can crawl the process stacks.
listsmodule, the zip family of functions now takes options to allow handling lists of different lengths.
zip:zip_get_crc32/2function to retrieve the
CRC32checksum from an opened ZIP archive.
gen_serveroptimized by caching callback functions
The modules Erlang DNS resolver
inet_resand helper modules have been updated for RFC6891; to handle OPT RR with DNSSEC OK (DO) bit.
Cache OTP boot code paths, to limit how many folders that are being accessed during a module lookup. Can be disabled with
- Support for Kernel TLS (kTLS), has been added to the
SSL application, for TLS distribution (
inet_tls), the SSL option
- Improved error checking and handling of ssl options.
Mitigate memory usage from large certificate chains by lowering the maximum handshake size. This should not effect the common cases, if needed it can be configured to a higher value.
For security reasons the
DSAalgorithms are no longer among the default values.
- Add encoding and decoding of
use_srtphello extension to facilitate for
DTLSusers to implement
For more details about new features and potential incompatibilities see the readme