OTP 21

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

Potential Incompatibilities

All Corba applications are now moved from the OTP repository

A new Corba repository will be created https://github.com/erlang

New applications ftp and tftp, moved from inets

ssl no longer supports 3_DES cipher suites or RSA-key exchange cipher suites by default

erlang:monitor on a primitive node (erl_interface, jinterface, etc) will no longer fail with badarg exception. Instead a monitor will be created, but it will only supervise the connection to the node.

Highlights

Erts:

Enhanced IO scalability

Support for usage of distribution controller processes for alternative transports, routing etc

compact instructions on 64bit systems for code below 4GB 20% less memory for loaded code

Rewrite of the efile-driver with NIFs and "Dirty schedulers" resulting in faster file operations

non-smp VM removed

link and monitor optimized for scalability

os:getenv/putenv now work on thread-safe emulation. No longer in sync with libc getenv(3). Manual synchronization will be needed.

Compiler:

Misc compiler optimizations including contributions from the Elixir team resulting in 10% improvements in benchmarks

"Tuple calls" have been removed from the run-time system.

Code such as f({ok, Val}) -> {ok, Val} is now automatically rewritten to f({ok, Val} = Tuple) -> Tuple. this reduces code size, execution time, and removed GC pressure.

is now automatically rewritten to this reduces code size, execution time, and removed GC pressure. More information in stacktrace from a number of operators

erlang:get_stacktrace/0 deprecated to be replaced with try ... catch C:R:Stacktrace -> ...

deprecated to be replaced with Creation of small maps with literal keys optimized.

A new predifined macro `OTP_RELEASE` and preprocessor directives `-if ` and `-elif`

Security:

DTLS is now supported in the SSL application

Enhanced support for distribution over TLS

"unsecure" ciphers removed from defaults in SSL and SSH.

A new option value defined to facilitate implementing exec servers. Old option kept for compatibility, but now gives errors on stderror.

Standard libraries:

New API for logging, logger

New uri_string module for parsing URIs according to "The standard"

New function lists:search(list,fun/1) -> {ok, Value} | false

Changed default behaviour of .erlang loading. escript, erlc, dialyzer and typer no longer load an .erlang at all.

For more details see

http://erlang.org/download/otp_src_21.0.readme

Pre built versions for Windows can be fetched here:

http://erlang.org/download/otp_win32_21.0.exe

http://erlang.org/download/otp_win64_21.0.exe

Online documentation can be browsed here:

http://erlang.org/documentation/doc-10.0/doc

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

Thank you for all your contributions!