<html dir="ltr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body style="text-align:left; direction:ltr;">
<div>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.</div>
<div><br>
</div>
<div>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.</div>
<div>We encourage users to try it out and give us feedback either by creating an issue here
<a href="https://github.com/erlang/otp/issues">https://github.com/erlang/otp/issues</a> or by posting to [Erlangforums](<a href="https://erlangforums.com/">https://erlangforums.com/</a>).</div>
<div><br>
</div>
<div>All artifacts for the release can be downloaded from the [Erlang/OTP Github](<a href="https://github.com/erlang/otp/releases/tag/OTP-26.0-rc2">https://github.com/erlang/otp/releases/tag/OTP-26.0-rc2</a>) release and you can view the new documentation at
<a href="https://erlang.org/documentation/doc-14.0-rc2/doc/">https://erlang.org/documentation/doc-14.0-rc2/doc/</a>. You can also install the latest release using [kerl](<a href="https://github.com/kerl/kerl">https://github.com/kerl/kerl</a>) like this: kerl
build 26.0-rc2 26.0-rc2.</div>
<div><br>
</div>
<div>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.</div>
<div><br>
</div>
<div>Many thanks to all contributors!</div>
<div><br>
</div>
<div>Below are some highlights of the release:</div>
<div><br>
</div>
<div># Highlights RC2</div>
<div><br>
</div>
<div>## Parsetools</div>
<div><br>
</div>
<div>- `Leex` has been extended with optional column number support.</div>
<div><br>
</div>
<div>## Stdlib</div>
<div><br>
</div>
<div>- The family of enumeration functions in module `lists` has been extended with</div>
<div> `enumerate/3` that allows a step value to be supplied.</div>
<div>- Update Unicode to version 15.0.0.</div>
<div>- `proc_lib:start*/*` has become synchronous when the</div>
<div> started process fails. This requires that a failing</div>
<div> process use a new function `proc_lib:init_fail/2,3`, or</div>
<div> exits, to indicate failure. All OTP behaviours have</div>
<div> been fixed to do this.</div>
<div><br>
</div>
<div>## Dialyzer</div>
<div><br>
</div>
<div>- Added the new built-in type `dynamic()` introduced in [EEP 61](<a href="https://www.erlang.org/eeps/eep-0061">https://www.erlang.org/eeps/eep-0061</a>), [PR introducing EEP 61](<a href="https://github.com/erlang/eep/pull/44">https://github.com/erlang/eep/pull/44</a>)
improving support for gradual type checkers.</div>
<div><br>
</div>
<div>## SSL</div>
<div><br>
</div>
<div>- Change the client default `verify` option to `verify_peer`.</div>
<div> *Note* that this makes it mandatory to also supply trusted CA certificates or explicitly set</div>
<div> `verify` to `verify_none`. This also applies when using the so called</div>
<div> anonymous test cipher suites defined in TLS versions pre TLS-1.3.</div>
<div><br>
</div>
<div><br>
</div>
<div># Highlights RC1</div>
<div><br>
</div>
<div>## The Shell</div>
<div>There are a lot of new features and improvements in the Erlang shell:</div>
<div>- auto-complete of variables, record names, record fields names, map keys, function parameter types and filenames.</div>
<div>- Open external editor in the shell to edit</div>
<div> the current expression.</div>
<div>- defining records (with types), functions, specs and types in the shell.</div>
<div><br>
</div>
<div>## New terminal</div>
<div>- The TTY/terminal subsystem has been rewritten.</div>
<div> Windows users will notice that `erl.exe` has the same</div>
<div> functionality as a normal Unix shell and that `werl.exe` is just a </div>
<div> symlink to `erl.exe`. This makes the Windows Erlang terminal</div>
<div> experience identical to that of Unix.</div>
<div><br>
</div>
<div>## Compiler and JIT optimizations:</div>
<div><br>
</div>
<div>- Creation and matching of binaries with segments of fixed sizes have been optimized.</div>
<div><br>
</div>
<div>- Creation and matching of UTF-8 segments have been optimized.</div>
<div><br>
</div>
<div>- Appending to binaries has been optimized.</div>
<div><br>
</div>
<div>- The compiler and JIT now generate better code for creation of small maps where all keys </div>
<div> are literals known at compile time.</div>
<div><br>
</div>
<div>- Thanks to the optimizations above the performance of the `base64` module has been</div>
<div> significantly improved. For example, on an x86_64 system with the JIT both encode and </div>
<div> decode are almost three times faster than in Erlang/OTP 25.</div>
<div><br>
</div>
<div>## Maps</div>
<div>- Map comprehensions as suggested in [EEP 58](<a href="https://www.erlang.org/eeps/eep-0058">https://www.erlang.org/eeps/eep-0058</a>) has now been</div>
<div>implemented.</div>
<div><br>
</div>
<div>- Some map operations have been optimized by changing the</div>
<div> internal sort order of atom keys. This changes the</div>
<div> (undocumented) order of how atom keys in small maps are</div>
<div> printed and returned by `maps:to_list/1` and `maps:next/1`.</div>
<div> The new order is unpredictable and may change between</div>
<div> different invocations of the Erlang VM.</div>
<div><br>
</div>
<div>- Introducing the new function `maps:iterator/2` for creating an interator</div>
<div> that return the map elements in a deterministic order.</div>
<div> There are also new modifiers `k` and `K` for the format</div>
<div> string in `io:format()` to support printing map elements</div>
<div> ordered.</div>
<div><br>
</div>
<div>## Dialyzer</div>
<div><br>
</div>
<div>- Dialyzer has a new incremental mode that be invoked by</div>
<div> giving the `--incremental` option when running Dialyzer.</div>
<div> This new incremental mode is likely to become the</div>
<div> default in a future release.</div>
<div><br>
</div>
<div>## Misc ERTS, Stdlib, Kernel, Compiler</div>
<div>- Multi [time warp mode](<a href="https://www.erlang.org/doc/apps/erts/time_correction.html#time-warp-modes">https://www.erlang.org/doc/apps/erts/time_correction.html#time-warp-modes</a>) is now enabled by default.</div>
<div> This assumes that all code executing on the system is </div>
<div> [time warp safe](<a href="https://www.erlang.org/doc/apps/erts/time_correction.html#time-warp-safe-code">https://www.erlang.org/doc/apps/erts/time_correction.html#time-warp-safe-code</a>).</div>
<div><br>
</div>
<div>- Support for UTF-8 atoms and strings in the NIF</div>
<div> interface including new functions `enif_make_new_atom`,</div>
<div> `enif_make_new_atom_len` and `enif_get_string_length`.</div>
<div><br>
</div>
<div>- The BIFs `min/2` and `max/2` are now allowed to be used in</div>
<div> guards and match specs.</div>
<div><br>
</div>
<div>- Improved the selective receive optimization, which can</div>
<div> now be enabled for references returned from other</div>
<div> functions. This greatly improves the performance of</div>
<div> `gen_server:send_request/3`, `gen_server:wait_response/2`,</div>
<div> and similar functions.</div>
<div><br>
</div>
<div>- New trace feature `call_memory`. Similar to `call_time`</div>
<div> tracing, but instead of measure accumulated time in</div>
<div> traced functions it measures accumulated heap space</div>
<div> consumed by traced functions. It can be used to compare</div>
<div> how much different functions are contributing to</div>
<div> garbage collection being triggered.</div>
<div><br>
</div>
<div>- It is no longer necessary to enable a feature in the</div>
<div> runtime system in order to load modules that are using</div>
<div> it. It is sufficient to enable the feature in the</div>
<div> compiler when compiling it.</div>
<div><br>
</div>
<div>- `inet:setopts/2` has got 3 new options: `reuseport`, `reuseport_lb` and `exclusiveaddruse`.</div>
<div><br>
</div>
<div>- Fix so that `-fno-omit-frame-pointer` is applied to all</div>
<div> of the Erlang VM when using the JIT so that tools, such</div>
<div> as `perf`, can crawl the process stacks.</div>
<div><br>
</div>
<div>- In the `lists` module, the zip family of functions now takes</div>
<div>options to allow handling lists of different lengths.</div>
<div><br>
</div>
<div>- Added the `zip:zip_get_crc32/2` function to retrieve the</div>
<div> `CRC32` checksum from an opened ZIP archive.</div>
<div>`gen_server` optimized by caching callback functions</div>
<div><br>
</div>
<div>- The modules Erlang DNS resolver `inet_res` and helper</div>
<div>modules have been updated for RFC6891; to handle OPT RR</div>
<div>with DNSSEC OK (DO) bit.</div>
<div><br>
</div>
<div>- Introduced `application:get_supervisor/1`.</div>
<div><br>
</div>
<div>- Cache OTP boot code paths, to limit how many folders</div>
<div>that are being accessed during a module lookup. Can be</div>
<div>disabled with `-cache_boot_path false`. </div>
<div><br>
</div>
<div>## SSL</div>
<div><br>
</div>
<div>- Support for Kernel TLS (kTLS), has been added to the</div>
<div>SSL application, for TLS distribution (`-proto_dist`</div>
<div>`inet_tls`), the SSL option `{ktls, true}`. </div>
<div>- Improved error checking and handling of ssl options.</div>
<div>- Mitigate memory usage from large certificate chains by</div>
<div> lowering the maximum handshake size. This should not</div>
<div> effect the common cases, if needed it can be configured</div>
<div> to a higher value.</div>
<div><br>
</div>
<div>- For security reasons the `SHA1` and `DSA`</div>
<div> algorithms are no longer among the default values.</div>
<div><br>
</div>
<div>- Add encoding and decoding of `use_srtp` hello extension</div>
<div> to facilitate for `DTLS` users to implement `SRTP`</div>
<div> functionality.</div>
<div><br>
</div>
<div>For more details about new features and potential incompatibilities see the [readme](<a href="https://erlang.org/download/otp_src_26.0-rc2.readme">https://erlang.org/download/otp_src_26.0-rc2.readme</a>)</div>
<div></div>
</body>
</html>