# Highlights
Erlang 5.1/OTP R8B

> This document describes the major new features of and changes to version R8B of Erlang/OTP. For more detailed information, please refer to the release notes for the respective applications.

> The major focus of the development of OTP R8B has been:

> - Improving the characteristics for huge systems and systems with high demands regarding soft real time characteristics. The work here is mainly concentrated on multithreaded I/O, memory handling and improvements in disk and ram based tables and Mnesia.

> - Introducing the important new application Megaco/H.248 as part of OTP.

> - Also improving the on-line documentation by adding a permuted index and reducing the number of levels.

## Appmon, graphical application monitor

- Added a web based user interface.

## Asn1, compiler and runtime functions for ASN.1

- New option per_bin which makes the encode/decode functions use binaries and the bit syntax instead of lists. The use of binaries will be the default solution in forthcoming versions.

- Now supporting the most common use of Information Objects according to X.681 for both BER and PER (aligned).

- The new option ber_bin which uses binaries in the encode/decode functions is now officially supported. It is recommended to use ber_bin instead of ber, the use of binaries will be the default in forthcoming versions.

- In combination with the BER encoding rules now the DER (Distinguished Encoding Rules) is supported. The DER encoding rules is defined as a number of restrictions to the BER encoding rules and is used mainly by the X.500 directory standards.

## Comet, COM client for Erlang

- Various improvements, can now be run as a port program or port driver.

- New examples, for example accessing data through ActiveX Data Objects (ADO).

## Compiler

- Various code optimizations, especially records are handled better.

- Floating point arithmetic is faster.

- A more powerful inliner is added.

- New syntax for setting all remaining fields in a record to the same value. This is useful when creating a wildcard record which for example is used as input to `mnesia:match`. The following statement sets field a to `Val` and all other fields to `'_'`:
  `#rec{a=Val,_='_'}`
  This is very practical for records with many fields.

- Improved handling of list comprehensions resulting in faster execution.

- New logical operators `andalso` and `orelse`.

- The boolean operators `and`, `or` and `not` can now be used in guards.

## cosEvent, Orber OMG Event Service

This version is a completely new version of the cosEvent application; older versions were not compliant with the OMG specification. The 'look and feel' has been changed to be more uniform with the other COS services.

## cosFileTransfer NEW

An Erlang implementation of the OMG CORBA FileTransfer service.

Note: The OMG CosFileTransfer specification have not been finalized yet. Hence, the API may be changed in the future.

## cosNotification, Orber OMG Notification Service

Minor changes.

## cosProperty NEW

An Erlang implementation of the OMG CORBA Property service.

## cosTime, Orber OMG Timer and TimerEvent Services

Minor changes.

## cosTransactions, Orber OMG Transaction Service

Minor changes.

## Crypto, MD5, SHA and CBC-DES encryption/decryption

No changes since OTP R7B01.

## Debugger

- Now uses debug information from the beam files instead of compiling the modules to be debugged. This means that the modules must have been compiled with the option `debug_info` set.

## ERTS, Erlang emulator

- Improved multithreaded I/O.

- Improved inet_driver (IP).

- Named ports.

- Improved memory management on Unix (using mmap) gives less memory fragmentation.

- Improved diagnostic BIF's retrieving memory information.

- Improved floating point arithmetic.

- Support for scatter/gather I/O in the file driver to improve performance.

- Improvements of the file drivers real-time characteristics for the single threaded case (default) when reading/writing very large blocks.

## Erl_Interface, low level interface to C

- The library `ei` now can be used stand-alone, without support from the old library `erl_interface`. The `ei` library is reentrant and makes it possible to have for example multiple ei-nodes on VxWorks (which means multiple IC generated nodes too).

- The old `erl_interface` API library is now obsolete and should not be used in new development, altough it is retained for backward compatibility reasons.

## EVA, a multi-featured event and alarm handler

No changes since OTP R7B01.

## GS, a Graphics System

- Some internal modules and processes in GS were prefixed with `gtk`. This prefix has been changed to `gstk` not to clash with modules that interface to the graphical toolkit Gtk.

## IC, an IDL compiler

- Added support for erlang::binary in compiler and C backends.

- Multiple backend option for faster compilation. Makes it possible to generate code with several different backends in one compiler run.

## Inets, HTTP server and FTP client.

Minor changes.

## Jinterface, low level interface to Java

No changes since R7B01.

## Kernel

- Hidden Erlang nodes and hidden global groups have been introduced. This makes it possible to establish hidden connections between Erlang nodes. See `global_group(3)` and `erl(1)`.

The distribution mechanisms are generally improved to meet demands for larger networks of distributed Erlang nodes.

- The inet, inet_tcp and inet_udp components are further improved and optimized.

- The global name service is faster.

## Megaco, a Megaco/H.248 protocol stack NEW

A framework for building applications on top of the Megaco/H.248 protocol. Megaco/H.248 is a protocol for control of elements in a physically decomposed multimedia gateway, enabling separation of call control from media conversion. A Media Gateway Controller (MGC) controls one or more Media Gateways (MG).

The semantics of the protocol has jointly been defined by two standardization bodies: IETF which calls the protocol Megaco, and ITU which calls the protocol H.248.

## Mesh

This application has been removed.

## Mnemosyne, query language support for Mnesia

No changes since R7B01.

## Mnesia, a heavy duty real-time distributed database

#### Already in R7 (Mnesia-3.10)

- The implementation for tables with property disc_copies is significantly improved and does not use Dets anymore. This will improve overall system performance.

#### R8 (Mnesia-4.X and later)

- The improvements in Dets will yield an improvement on the disc_only_copies storage type.

- `[dirty_]select/[2|3]` is implemented which should decrease the need to use Mnemosyne and `match_object`. By use of `select` the search performance is improved. The data returned from a search with `select` can be taylored by the user. See ERTS User's Guide for syntax of match expressions.

- Synced transactions have been implemented, this kind of transactions do not increase the performance but have a better behaviour from a system perspective. A node B cannot be overloaded by running fast transactions on node A and you cannot overload disk_log as you can with the normal `mnesia:transaction/[123]` call.

- Old dependencies, workarounds and support for old Erlang/OTP release will be removed.

## Mnesia_Session, a foreign language interface to Mnesia

Minor changes.

## ODBC

- The application has been rewritten. The main change is that allocation and deallocation of memory is now handled by the application.

- ODBC also need handlers for communication with the database. These handlers are now allocated by application.

- New interface functions have been added which replace the old ones. The old interface functions are retained for backwards compatibility but may be removed in the future. For more information, see the ODBC Reference Manual.

## Orber, a CORBA Object Request Broker

- The overhead for Inter-ORB communication has been reduced significantly compared with the first R7B version (3.1.8). As a part of this work the memory usage has also been reduced.

## OS_Mon, monitoring of disk usage and OS resources

- memsup and disksup are improved to give faster responses and generate less overhead.

- Now works on Linux and FreeBSD.

## Parsetools, parsing and lexical analysis tools

No changes since R7B01.

## Pman, graphical process manager

Minor changes.

## Runtime_Tools

- Tracing is generally improved and bugfixed, see `dbg(3)` and `erlang(3)`.

## SASL, release handling tools

- The report browser (`rb`) no longer ignores faulty events - it prints the raw terms instead. It also presents user-generated `error_report` and `info_report` events more nicely.

- `systools_make` uses Xref instead of Exref for cross reference checks. The format of the warnings for undefined functions has been changed.

## SNMP

Minor changes.

## SSL

Minor changes.

## STDLIB, Erlang standard libraries

#### Ets/Dets

- Ets and Dets now includes more powerful alternatives to the `(d)ets:match/2`, `(d)ets:match_object/2` and `(d)ets:match_delete/2` calls. The new matching alternatives are called `(d)ets:select/2` and `(d)ets:select_delete/2`.

- The new calls `(d)ets:match/1`, `(d)ets:match/3` and corresponding `match_object`/`select` calls make it possible to fetch smaller chunks of matching objects for processing instead of always retrieving all matching objects at the same time.

- The predicate `(d)ets:member/2` makes it possible to look for a key in an Ets table without retrieving the whole object.

- `(d)ets:insert/2` now also accepts a list of objects to be inserted in one call.

- Furthermore the following `(d)ets` calls are added: `delete_object`, `delete_all_objects`, `from_(d)ets`, `to_(d)ets`, `init_table` and `ets:test_ms`. See the documentation for details.

- Dets is much improved in terms of speed, resource consumption and works better together with multithreaded I/O.

#### disk_log

- Improved performance, especially when using multithreaded I/O.

## Toolbar

Minor changes.

## Tools

- Coast was much too slow and inefficient, especially for large modules. Also, it was discovered that Coast in some cases returned erroneous values.

  Consequently, Coast has been discontinued and is replaced with a new tool Cover with similar interface and functionality. Refer to the Tools User's Guide and Reference Manual for more information about Cover.

- Added a web based user interface to Cover.

- Xref represents unresolved calls with calls where the module, the function or the number of arguments are atoms and integers that are unlikely to occur in an Erlang system. Calls to `erlang:apply/2` and the like are included among the external calls. This is in contrast to R7 where calls to apply and spawn were used for representing unresolved calls.

- A new profiling tool Fprof which measures how time is used in your Erlang programs. Uses trace to file to minimize performance impact, and displays time for calling and called functions.

## TV, grapical table visualizer

Minor changes.

## WebTool NEW

A framework for web based tools.