This document lists some highlights of Erlang 5.7/OTP R13A (unpatched), compared to the previous version Erlang 5.6/OTP R12B, with focus on things not already released as R12B patches.
Note: This document was compiled at the time when R13A was released and does not list any features introduced in R13 patches.
Multi-core and SMP performance improvements
There SMP performance is significantly improved and will allow most applications to scale much better on systems with many cores or processors. Listed below are some of the most important improvements:
The runtime system with SMP support now uses multiple, scheduler specific run queues, instead of one globally shared run queue.
The lock protecting the shared run queue was heavily contended, and the shared run queue also caused Erlang processes to randomly migrate between schedulers with negative cache effects as a result.
With the current scheduler specific run queue solution, lock contention due to run queue protection has been reduced, and Erlang processes are only migrated when needed to balance the load between the schedulers. The reduced amount of migration also reduce lock contention on locks protecting the scheduler specific instances of the erts internal memory allocators.
The scheduler specific run queues are also a necessity for a lot of future planned NUMA (Non-Uniform Memory Access) specific optimizations.
Message passing has been further optimized for parallell execution. This makes parallell sending to one common receiver much more efficient.
Scheduler threads can now be bound to logical processors on newer Linux ans Solaris systems.
Support for Unicode is implemented as described in EEP10. Formatting and reading of unicode data both from terminals and files is supported by the io and io_lib modules. Files can be opened in modes with automatic translation to and from different unicode formats. The module 'unicode' contains functions for conversion between external and internal unicode formats and the re module has support for unicode data. There is also language syntax for specifying string and character data beyond the ISO-latin-1 range.
The BIFs atom_to_binary/2, binary_to_atom/2 and binary_to_existing_atom/2 have been added.
Independent Erlang clusters on the same host
Nodes belonging to different independent clusters can now co-exist on the same host with the help of a new environment variable setting ERL_EPMD_PORT. The environment variable is used by Erl_interface and J_interface as well.
Reltool is a release management tool. It analyses a given Erlang/OTP installation and determines various dependencies between applications. The graphical frontend depicts the dependencies and enables interactive customization of a target system. The backend provides a batch interface for generation of customized target systems. The application is still somewhat limited and should be regarded as experimental in this release. The intention is that this application will be a valuable tool for making both traditional Erlang target systems as well as standalone components in Erlang.
wxErlang is an Erlang binding to the WxWidgets GUI library which provides support for cross platform GUI applications. wxErlang is still in beta status and the intention is that it shall replace GS in a later stage. The Erlang debugger is also shipped in a wxErlang version.
A support client module for SSH and SFTP, ct_ssh, has been introduced.
Test case groups have been introduced. With this feature it's possible to execute groups (possibly nested) of test cases.
A group definition contains a name tag, a list of properties and a list of test cases (including possible nested group definitions). The properties make it possible to execute test cases in parallel, in sequence and in shuffled order. It is also possible to repeat test cases according to different criteria.
The analysis now accepts opaque type declarations and detects violations of opaqueness of terms of such types. Starting with R13, many Erlang/OTP standard libraries (array, dict, digraph, ets, gb_sets, gb_trees, queue, and sets) contain opaque type declarations of their main data types. Dialyzer will spit out warnings in code that explicitly depends on the structure of these terms.
Added support for handling UTF segments in bitstreams and for detecting obvious type errors in these segments. Warning: This code is not terribly tested though since there are very few Erlang programs which use Unicode-based binaries - not surprising since this is a new language feature of R13.
Strengthened the discrepancy identification when testing for equality and matching between terms of different types. This detects more bugs in code.
See the Dialyzer documentation and release notes for even more enhancements.
The "new_ssl" implementation is significantly improved and should be near product status now. The new SSL is implemented in pure Erlang except for the crypto routines that are implemented in the crypto driver which is an interface to libcrypto from OpenSSL.
The Erlang scanner has been augmented as to return white-space, comments and exact location of tokens. This means that the scanner can easily be used in tools such as editors, pretty printers, syntax highlighters etc. where it is important to be able recreate the original source document.