NEWS

OTP 23 Release Candidate 3
Written by , Wednesday, 22 April 2020

OTP 23 Release Candidate 3

This is the third and last of three planned release candidates before the OTP 23 release. 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.

Erlang/OTP 23 is a new major release with new features, improvements as well as a few incompatibilities.

Highlights (rc3)

Apart from the changes below, this third pre-release contains only minor fixes.

Potential Incompatibilities

  • SSL: * Support for SSL 3.0 is completely removed.
  • TLS 1.3 is added to the list of default supported versions.
  • erl_interface: Removed the deprecated parts of erl_interface

(erl_interface.h and essentially all C functions with prefix erl_).

  • The deprecated erlang:get_stacktrace/0 BIF now returns an empty list instead of a stacktrace.

erlang:get_stacktrace/0 is scheduled for removal in OTP 24.

  • ...

Highlights (rc2)

  • ssh: * OpenSSH 6.5 introduced a new file representation of

keys called openssh-key-v1. This is now supported with the exception of handling encrypted keys.

  • Algorithm configuration could now be done in a .config file.

This is useful for example to enable an algorithm that is disabled by default without need to change the code.

  • ssl: * Support for the middlebox compatibility mode makes the TLS 1.3 handshake

look more like a TLS 1.2 handshake and increases the chance of successfully establishing TLS 1.3 connections through legacy middleboxes.

  • Add support for key exchange with Edward curves and PSS-RSA padding in

signature verification

  • The possibility to run Erlang distribution without

relying on EPMD has been extended. To achieve this a couple of new options to the inet distribution has been added. * -dist_listen false Setup the distribution channel, but do not listen for incoming connection.

  • -erl_epmd_port Port Configure a default port that

the built-in EPMD client should return.

  • ...
  • A first EXPERIMENTAL socket backend to

gen_tcp and inet has been implemented. gen_udp and gen_sctp will follow. Putting {inet_backend, socket} as first option to listen() or connect() makes it easy to try this for existing code

Highlights (rc1)

  • A new module erpc in kernel which implements an enhanced subset of the operations provided by the rpc module. Enhanced in the sense that it makes it possible to distinguish between returned value, raised exceptions and other errors. erpc also has better performance and scalability than the original rpc implementation. This by utilizing the newly introduced spawn_request() BIF. Also the rpc module benefits from these improvements by utilizing erpc when possible.
  • Scalability and performance Improvements plus new functionality regarding distributed spawn operations.
  • In binary matching, the size of the segment to be matched is now allowed to be a guard expression (EEP-52)
  • When matching with maps the keys can now be guard expressions (EEP-52).
  • ssh: support for TCP/IP port forwarding, a.k.a tunneling a.k.a as tcp-forward/direct-tcp is implemented. In the OpenSSH client, this corresponds to the options -L and -R.
  • Allow underscores in numeric literals to improve readability. Examples: 123_456_789, 16#1234_ABCD.
  • New functions in the shell for displaying documentation for Erlang modules, functions and types. The

functions are: * h/1,2,3 -- Print the documentation for a Module:Function/Arity.

  • ht/1,2,3 -- Print the type documentation for a Module:Type/Arity.

The embedded documentation is created as docchunks (EEP 48) when building the Erlang/OTP documentation.

  • kernel: The module pg with a new implementation of distributed named process groups is introduced. The old module pg2 is deprecated and scheduled for removal in OTP 24.
  • Our tool chain for building the Windows packages is upgraded with new C++ compiler, Java compiler, OpenSSL libraries and wxWidgets versions. We are now using WSL (the Linux Subsystem for Windows when building) which makes it easier to handle the build environment.
  • ...

For more details see http://erlang.org/download/otp_src_23.0-rc3.readme

Pre built versions for Windows can be fetched here: http://erlang.org/download/otp_win32_23.0-rc3.exe http://erlang.org/download/otp_win64_23.0-rc3.exe

Online documentation can be browsed here: http://erlang.org/documentation/doc-11.0-rc3/doc The Erlang/OTP source can also be found at GitHub on the official Erlang repository, https://github.com/erlang/otp

Erlang OTP 22.0-rc2 is available for testing!
Written by , Wednesday, 27 March 2019

OTP 22 Release Candidate 2

This is the second of three planned release candidates before the OTP 22 release.

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, as it lets us know that the release candidate got some testing.

Erlang/OTP 22 is a new major release with new features and improvements as well as incompatibilities.

Potential Incompatibilities

  • gen_* behaviours: If logging of the last N messages through sys:log/2,3 is active for the server, this log is included in the terminate report.
  • reltool: A new element, Opts, can now be included in a rel tuple in the reltool release specific configuration format: {rel, Name, Vsn, RelApps, Opts}.
  • All external pids/ports/refs created by erlang:list_to_pid and similar functions now compare equal to any other pid/port/ref with same number from that node.
  • The old legacy erl_interface library is deprecated as of OTP 22, and will be removed in OTP 23. This does not apply to the ei library.
  • VxWorks is deprecated as of OTP 22 and will be removed in OTP 23.

Additional highlights in release candidate 2

  • A simple socket API is provided through the socket module. This is a low level API that does not replace gen_[tcp|udp|sctp]. It is intended to eventually replace the inet driver. It also provides a basic API that facilitates the implementation of other protocols than TCP, UDP and SCTP. Known issues are; No support for the Windows OS (currently), a small term leakage. This feature will be classed as experimental in OTP 22.
  • ssl: Basic support for TLS 1.3 Server for experimental use.
  • In OTP 22, HiPE (the native code compiler) is not fully functional. The reasons for this are new BEAM instructions for binary matching that the HiPE native code compiler does not support. If erlc is invoked with the +native option, and if any of the new binary matching instructions are used, the compiler will issue a warning and produce a BEAM file without native code.
  • erts: Added the NIF function enif_term_type, which helps avoid long sequences of enif_is_xyz by returning the type of the given term. This is especially helpful for NIFs that serialize terms, such as JSON encoders, where it can improve both performance and readability.
  • crypto: The new hash_info/1 and cipher_info/1 functions returns maps with information about the hash or cipher in the argument.

Highlights in release candidate 1

Erts:

  • Support for Erlang Distribution protocol to split the payload of large signals into several fragments.
  • ETS option write_concurrency now also effects and improves scalability of ordered_set tables.
  • The length/1 BIF used to calculate the length of the list in one go without yielding, even if the list was very long. Now it yields when called with long lists.
  • A new (still experimental) module socket is introduced. It is implemented as a NIF and the idea is that it shall be as "close as possible" to the OS level socket interface.

Compiler:

  • The compiler has been rewritten to internally use an intermediate representation based on Static Single Assignment (SSA). The new intermediate representation makes more optimizations possible. * The binary matching optimizations are now applicable in many more circumstances than before.
  • Type optimizations are now applied across local function calls, and will remove a lot more redundant type tests than before.
  • All compiler options that can be given in the source file can now be given in the option list on the command line for erlc.

Standard libraries:

  • Cover now uses the counters module instead of ets for updating counters. The new function cover:local_only/0 allows running Cover in a restricted but faster local-only mode. The increase in speed will vary depending on the type of code being cover-compiled, as an example the compiler test suite runs more than twice as fast with the new Cover.
  • SSL now uses the new logger API, including log levels and verbose debug logging.

For more details see http://erlang.org/download/otp_src_22.0-rc2.readme

Pre built versions for Windows can be fetched here: http://erlang.org/download/otp_win32_22.0-rc2.exe http://erlang.org/download/otp_win64_22.0-rc2.exe

Online documentation can be browsed here: http://erlang.org/documentation/doc-11.0-rc2/doc

The Erlang/OTP source can also be found at GitHub on the official Erlang repository:

https://github.com/erlang/otp

OTP-22.0-rc2

 

Thank you for all your contributions!

Erlang OTP 22.0-rc1 is available for testing!
Written by , Wednesday, 13 February 2019

OTP 22 Release Candidate 1

This is the first of three planned release candidates before the OTP 22 release.

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, as it lets us know that the release candidate got some testing.

Erlang/OTP 22 is a new major release with new features and improvements as well as incompatibilities.

Potential Incompatibilities

  • gen_* behaviours: If logging of the last N messages through sys:log/2,3 is active for the server, this log is included in the terminate report.
  • New element, Opts, can now be included in a rel tuple in the reltool release specific configuration format: {rel, Name, Vsn, RelApps, Opts}.
  • All external pids/ports/refs created by erlang:list_to_pid and similar functions now compare equal to any other pid/port/ref with same number from that node.
  • The old legacy erl_interface library is deprecated as of OTP 22, and will be removed in OTP 23. This does not apply to the ei library.
  • VxWorks is deprecated as of OTP 22 and will be removed in OTP 23.

Known problems

Native code generation does not work for all modules due to new BEAM instructions not supported by HiPE the native compiler. However, dialyzer's automatic compilation to native code still works. Building OTP with the configure option enable-native-libs will not work in this release candidate.

Highlights

Erts:

  • Support for Erlang Distribution protocol to split the payload of large signals into several fragments.
  • ETS option write_concurrency now also effects and improves scalability of ordered_set tables.
  • The length/1 BIF used to calculate the length of the list in one go without yielding, even if the list was very long. Now it yields when called with long lists.
  • A new (still experimental) module socket is introduced. It is implemented as a NIF and the idea is that it shall be as "close as possible" to the OS level socket interface.

Compiler:

  • The compiler has been rewritten to internally use an intermediate representation based on Static Single Assignment (SSA). The new intermediate representation makes more optimizations possible. * The binary matching optimizations are now applicable in many more circumstances than before.
  • Type optimizations are now applied across local function calls, and will remove a lot more redundant type tests than before.
  • All compiler options that can be given in the source file can now be given in the option list on the command line for erlc.

Standard libraries:

  • Cover now uses the counters module instead of ets for updating counters. The new function cover:local_only/0 allows running Cover in a restricted but faster local-only mode. The increase in speed will vary depending on the type of code being cover-compiled, as an example the compiler test suite runs more than twice as fast with the new Cover.
  • SSL now uses the new logger API, including log levels and verbose debug logging.

For more details see http://erlang.org/download/otp_src_22.0-rc1.readme

Pre built versions for Windows can be fetched here: http://erlang.org/download/otp_win32_22.0-rc1.exe http://erlang.org/download/otp_win64_22.0-rc1.exe

Online documentation can be browsed here: http://erlang.org/documentation/doc-11.0-rc1/doc

The Erlang/OTP source can also be found at GitHub on the official Erlang repository:

https://github.com/erlang/otp

OTP-22.0-rc1

 

Thank you for all your contributions!