Erlang/OTP 26.0-rc3 (Release Candidate 3) is released
Henrik Nord X
henrik.x.nord@REDACTED
Wed Apr 12 16:03:27 CEST 2023
Erlang/OTP 26.0-rc3 is the third and final release candidate before the OTP 26.0 release.
This release candidate fixes some bugs found in the first two release candidates.
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](https://erlangforums.com/).
All artifacts for the release can be downloaded from the [Erlang/OTP Github](https://github.com/erlang/otp/releases/tag/OTP-26.0-rc3) release and you can view the new documentation at https://erlang.org/documentation/doc-14.0-rc3/doc/. You can also install the latest release using [kerl](https://github.com/kerl/kerl) like this: kerl build 26.0-rc3 26.0-rc3.
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:
# Highlights RC2
## Parsetools
- `Leex` has been extended with optional column number support.
## Stdlib
- The family of enumeration functions in module `lists` has been extended with
`enumerate/3` that 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.
## Dialyzer
- Added the new built-in type `dynamic()` introduced in [EEP 61](https://www.erlang.org/eeps/eep-0061), [PR introducing EEP 61](https://github.com/erlang/eep/pull/44) improving support for gradual type checkers.
## SSL
- Change the client default `verify` option to `verify_peer`.
*Note* that this makes it mandatory to also supply trusted CA certificates or explicitly set
`verify` to `verify_none`. This also applies when using the so called
anonymous test cipher suites defined in TLS versions pre TLS-1.3.
# Highlights RC1
## The Shell
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.
## New terminal
- The TTY/terminal subsystem has been rewritten.
Windows users will notice that `erl.exe` has the same
functionality as a normal Unix shell and that `werl.exe` is 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 `base64` module 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.
## Maps
- Map comprehensions as suggested in [EEP 58](https://www.erlang.org/eeps/eep-0058) 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:to_list/1` and `maps:next/1`.
The new order is unpredictable and may change between
different invocations of the Erlang VM.
- Introducing the new function `maps:iterator/2` for creating an interator
that return the map elements in a deterministic order.
There are also new modifiers `k` and `K` for the format
string in `io:format()` to support printing map elements
ordered.
## Dialyzer
- Dialyzer has a new incremental mode that be invoked by
giving the `--incremental` option 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](https://www.erlang.org/doc/apps/erts/time_correction.html#time-warp-modes) is now enabled by default.
This assumes that all code executing on the system is
[time warp safe](https://www.erlang.org/doc/apps/erts/time_correction.html#time-warp-safe-code).
- Support for UTF-8 atoms and strings in the NIF
interface including new functions `enif_make_new_atom`,
`enif_make_new_atom_len` and `enif_get_string_length`.
- The BIFs `min/2` and `max/2` are 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:send_request/3`, `gen_server:wait_response/2`,
and similar functions.
- New trace feature `call_memory`. Similar to `call_time`
tracing, 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/2` has got 3 new options: `reuseport`, `reuseport_lb` and `exclusiveaddruse`.
- Fix so that `-fno-omit-frame-pointer` is applied to all
of the Erlang VM when using the JIT so that tools, such
as `perf`, can crawl the process stacks.
- In the `lists` module, the zip family of functions now takes
options to allow handling lists of different lengths.
- Added the `zip:zip_get_crc32/2` function to retrieve the
`CRC32` checksum from an opened ZIP archive.
`gen_server` optimized by caching callback functions
- The modules Erlang DNS resolver `inet_res` and helper
modules have been updated for RFC6891; to handle OPT RR
with DNSSEC OK (DO) bit.
- Introduced `application:get_supervisor/1`.
- Cache OTP boot code paths, to limit how many folders
that are being accessed during a module lookup. Can be
disabled with `-cache_boot_path false`.
## SSL
- Support for Kernel TLS (kTLS), has been added to the
SSL application, for TLS distribution (`-proto_dist`
`inet_tls`), the SSL option `{ktls, true}`.
- 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 `SHA1` and `DSA`
algorithms are no longer among the default values.
- Add encoding and decoding of `use_srtp` hello extension
to facilitate for `DTLS` users to implement `SRTP`
functionality.
For more details about new features and potential incompatibilities see the [readme](https://erlang.org/download/otp_src_26.0-rc3.readme)
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-announce/attachments/20230412/f665929d/attachment-0001.htm>
More information about the erlang-announce
mailing list