Highlights

This document lists some highlights of Erlang 5.6/OTP R12B (unpatched), compared to the previous version Erlang 5.5/OTP R11B, with focus on things not already released as R11B patches.

Note: This document was compiled at the time when R12B was released and does not list any features introduced in R12B patches.

## 1 Erlang Language and Run-time System

- The Windows version of Erlang now has SMP support. On all platforms, the SMP emulator is run by default on machines which has more than one virtual or physical processor.
- Bitstrings (bit-level) binaries and binary comprehensions are now officially part of the language. See the Reference Manual.
- Two new guard BIFs have been introduced as a recommended replacement for size/1. (The size/1 BIF will be removed no earlier than in R14B.) The BIFs are tuple_size/1 to calculate the size of a tuple and byte_size/1 to calculate the number of bytes needed for the contents of the binary or bitstring (rounded up to the nearest number of bytes if necessary).
  There is also a new bit_size/1 BIF that returns the exact number of bits that a binary or bitstring contains.
- Literal lists, tuples, and binaries are no longer constructed at run-time as they used to be, but are stored in a per-module constant pool. Literals that are used more than once are stored only once.
  This is not a change to the language, only in the details of its implementation. Therefore, the implications of this change is described in the Efficiency Guide.
- The Erlang driver API has been extended with a portable POSIX thread like API for multi-threading. The Erlang driver thread API provides: threads, mutexes, condition variables, read/write locks, and thread-specific data. For more information see the erl_driver(3) documentation.

## 2 New Applications

### 2.1 Test Server

Test Server is a portable test server for automated application testing. The server can run test suites on local or remote targets and log progress and results to HTML pages. The main purpose of Test Server is to act as engine inside customized test tools. A callback interface for such framework applications is provided.

### 2.2 Common Test

Common Test is a portable application for automated testing. It is suitable for black-box testing of target systems of any type (i.e. not necessarily implemented in Erlang), as well as for white-box testing of Erlang/OTP programs.

Black-box testing is performed via standard O&M interfaces (such as SNMP, HTTP, Corba, Telnet, etc) and, if required, via user specific interfaces. White-box testing of Erlang/OTP programs is easily accomplished by calling the target API functions directly from the test case functions.

Common Test executes test suite programs automatically, without operator interaction. Test progress and results is printed to logs on HTML format, easily browsed with a standard web browser. A number of libraries are provided that contain useful support functions to fill various testing needs and requirements.

### 2.3 Percept

Percept is a new application for profiling concurrency.

## 3 Discontinued Applications

The mnemosyne and mnesia_session applications have been removed.

## 4 Existing Applications

### 4.1 ASN1

Decoding using the option [per_bin,optimize] is now faster.

### 4.2 Dialyzer

Dialyzer detects significantly more errors than in previous versions.

Dialyzer now accepts and takes into account type information in record declarations and in contracts. (The exact contract syntax is considered experimental.) Various OTP applications (e.g. stdlib and kernel) are partially annotated with appropriate contracts specifying types information for their functions.

### 4.3 Inets

A new uniform Inets interface provides a flexible way to start/stop inets services and get information about running services. See inets(3). This also means that inflexibilities in the HTTP server has been removed and more default values has been added.

Profiles are now supported in the HTTP client, i.e. the options available in set_options/1 can be set locally for a certain profile and do not have to affect all HTTP-requests issued in the Erlang node. Calls to the HTTP client API functions not using the profile argument will use the default profile.

### 4.4 Megaco

Added support for the full v3-standard (including segmentation).

### 4.5 Parsetools

The size of the code generated by yecc has been reduced.

### 4.6 SSL

A new implementation of SSL is released as an alpha version in ssl-3.9; it is planned to replace the old implementation in a future release. The new implementation can be accessed by providing the option {ssl_imp,new} to the ssl:connect() and ssl:listen() functions.

The new implementation is Erlang based and all logic is in Erlang and only the payload encryption calculations are done in C via the crypto application.

### 4.7 STDLIB

When an exception occurs the Erlang shell now displays the class, the reason, and the stacktrace in a clearer way (rather than dumping the raw EXIT tuples as before). proc_lib:format/1 displays the exception of crash reports in the same clearer way.

The new module array provides a fast functional array implementation.

Copyright © 1991-2008 Ericsson AB