DOWNLOAD OTP 22.0

OTP 22.0

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

For a deeper dive into the hightligts of the OTP 22 release, you can read our blog here: http://blog.erlang.org/OTP-22-Highlights/

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.

New Features

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.
  • 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.

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.
  • 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.

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.
  • 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: now uses the new logger API, including log levels and verbose debug logging.
  • SSL: Basic support for TLS 1.3 Server for experimental use.
  • Crypto: The new hash_info/1 and cipher_info/1 functions returns maps with information about the hash or cipher in the argument.

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

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

Online documentation can be browsed here: http://erlang.org/doc/search/

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

https://github.com/erlang/otp/releases/tag/OTP-22.0

Make sure to report any and all bugs here:

https://bugs.erlang.org/

Thank you for all your contributions!

Artifacts:

OTP-22.0.README file (85087 bytes)

otp_doc_html_22.0.tar.gz file (33737075 bytes)

otp_doc_man_22.0.tar.gz file (1347830 bytes)

otp_src_22.0.tar.gz file (86444982 bytes)

otp_win32_22.0.exe file (91806805 bytes)

otp_win64_22.0.exe file (94094976 bytes)

Compiling Erlang from source

You can build Erlang from source on your own, following the building and installation instructions. Or use the Kerl script. Kerl is a script that lets you easily build Erlang with a few commands. Follow the instructions to build.

Source Versions and Windows Binaries for Patches

Information about all released OTP versions since OTP 17.0 can be found at the OTP Versions Tree page. This information includes a link to the GitHub source tag, and a link to the README. As of OTP 23, Windows binaries can also be downloaded from here for all patches.

Pre-built Binary Packages

Most OS package managers provide pre-built binary packages. You can also download the latest stable releases from Erlang Solutions. Erlang Solutions provides pre-built binary packages for OS X, Windows, Ubuntu, Debian, Fedora, CentOS, Raspbian and other operating systems.

  • For Homebrew on OS X: brew install erlang
  • For MacPorts on OS X: port install erlang
  • For Ubuntu and Debian: apt-get install erlang
  • For Fedora: yum install erlang
  • For FreeBSD: pkg install erlang

License

Since OTP 18.0, Erlang/OTP is released under Apache License 2.0. The older releases prior to 18.0 were released under Erlang Public License (EPL), a derivative work of the Mozilla Public License (MPL).

Available releases

PDF files are included in the Windows installer and in the HTML documentation tarballs, starting with theR13B03 release.

There is a file containing MD5 checksumsfor all files in the download directory, also reachable through rsync rsync.erlang.org::erlang-download