# Highlights
Erlang 5.4/OTP R10B

> This document describes the major new features of and changes to Erlang 5.4/OTP R10B, compared to Erlang 5.3/OTP R9C with focus on the major completely new things which has not already been delivered as patches to R9C. Some of the new features and changes have already been delivered as patches to R9C and/or R9B. For Open Source users this document can also serve as a good approximation to the differences compared to R9C-2 (corresponding to OTP patchlevel 663).

> For more detailed information, please refer to the release notes for the individual applications.

## Documentation

- A new tutorial "Getting Started With Erlang".
  This is a "kick start" tutorial to get you started with Erlang. Everything in it is true, but only part of the truth. For example, It will only tell you the simplest form of the syntax, not all esoteric forms. Together with the Erlang Reference Manual it should be a very good start for learning Erlang.

## ERTS, Erlang emulator

- Process and port identifiers have been made more unique. Now we use 28 bits for the internal representation compared to 18 before. This also increases the maximum number of Erlang processes (the new maximum is 268435456 previously it was 262144). The new representation of a Pid (process identifier) has impact on the Erlang distribution protocol. The use of new or old Pid representation can be controlled with a flag when the Erlang node is started.
- Significantly improved performance regarding handling of links and monitors in the emulator. This will have positive impact on performance for a system with many dynamical processes who are using links. Measurement in a real system is necessary in order to know exactly how much this improves performance.
- Support for the new language construct try…catch.

## Standard libraries (kernel, stdlib)

- Query List Comprehensions QLC which is a very convienient way to perform queries on ets and mnesia tables. QLC is intended to replace mnemosyne in forthcoming releases. The use of mnemosyne is already strongly discouraged especially in time critical applications since it is very resource consuming and cpu demanding. This is the first version and there will be more optimizations added in forthcoming releases. There is also additional functionality in mnesia to support QLC. Note that mnemosyne is still included and works exactly as before.
- Support for records in the Erlang Shell. There are commands for reading record definitions from files and for manipulating record definitions. The record syntax can be used in the shell and return values are printed as records when possible using the record definitions known to the shell.
- New function insert_new/2 in ets and dets. Will only succed if this is the first insert for a key.

## Compiler, Erlang compiler

- The semantics for boolean operators in guards have been changed to be more consistent.
- The compiler now warns for more types of suspect code, e.g as expressions that will fail in runtime (such as atom-42), guards that are always false and patterns that cannot match.
- Improved compilation speed with ERLC (starts as little of the Erlang system as possible, for example avoiding ‘start_sasl’).
- The new language construct try…catch is supported.

## New Applications

- New application xmerl which is a validating XML-parser with many useful features for handling and transforming XML-data in Erlang. This application was originally created by Ulf Wiger and has been developed at Sourceforge.net for several years.. It has now been included in the Erlang/OTP distribution and is supported by the OTP team.
- New applications edoc and syntax_tools which can be used to produce documentation of Erlang modules by means of special comments in the Erlang source code. These applications are originally created by Richard Carlsson at Uppsala University and are now included in the Erlang/OTP distribution. The reason for this is to offer one "standardized" way to document Erlang, where the necessary tools are always available.

## Other Applications

- Erl_interface and J_interface: Support for new format of Pid and a compatibility mode so that old format can be used.
- Mnesia: support for QLC (the mnesia:table function) otherwise the same as in R9C.
- Observer/Crashdump_viewer can now handle really large crashdumps without getting problems with that the Internet browser times out.
- Tools/Cover: now with “Exclude Included Functions” (Important for Basic Test in GSN) + proper handling of try…catch.
- Snmp is restructured internally, now there is a supported SNMP manager and it can also be run together with the SNMP agent within the same Erlang node. There are some potential incompatibilities because of this.
- ODBC: There is now support for multiple result sets.
- IDL compiler (IC): A new compiler option `c_report` has been introduced for C back-ends (client and server). If that option is set, encoding/decoding errors will be reported to `stderr`. This should make debugging much easier than before.
- Orber: To avoid malicious attacks, it is now possible to configure Orber to only accept incoming requests up to a certain size.
- Inets: The http-client is now officially supported and documented.
- Improvements in the emacs-mode for Erlang.