Highlights
Erlang 5.0/OTP R7B
This document points at the most important improvements in
Erlang 5.0/OTP R7B. For more detailed information, please check
the release notes for the respective applications.
General
Some of the major new features in this version of Erlang/OTP are:
-
The bit syntax, a language addition which can be used to construct
binaries and to match binary patterns.
-
The new CORBA services cosNotification and cosTime.
-
The new very capable cross reference tool Xref.
-
The new application Comet which makes it possible to call COM objects from
Erlang on the Windows platform.
-
A new interopability guide whose purpose is to give the reader an orientation
of the different interoperability mechanisms that can be used when
integrating a program written in Erlang with a program written in another
programming language, from the Erlang programmer's point of view.
Note also that the Jive application has now been removed.
ERTS-5.0.1
-
Several changes has been made to the garbage collector and internal memory
allocation routines to reduce memory consumption and memory fragmentation.
-
The bit syntax, a language addition for constructing and matching binaries.
For more infomation, see Extensions to Erlang. Also, the handling of
small binaries (up to 64 bytes) has been optimized, as well as splitting of
binaries.
-
Call tracing is greatly improved. It is now possible to trace local function
calls (and calls to local functions) set up with the
erlang:trace_pattern BIF. Trace compilation for local call is
no longer needed.
-
There is now support for operating system threads in drivers. The file
driver has been modified to make use of this, which means that lengthy
file operations no longer cause everything on the node to pause. Currently,
only supported on Solaris and Windows. The number of threads in the thread
pool can be set with the emulator system flag
-A. The default number of threads is 0, which means that this
feature is turned off. The number of threads in a node can be obtained by
the call erlang:info(thread_pool_size).
-
The BIF erlang:monitor(process,Proc) has been extended to accept
named processes, local and remote. See the documentation for
erlang:monitor/2 and erlang:demonitor/1.
-
The inet driver (inet_drv, i.e the driver for (TCP&UDP)/IP) has
been replaced, as well as a lot of supporting Erlang code in the Kernel
application. The new code eliminates one data relay process per socket and
thereby gives a throughput boost.
-
The Erlang emulator now uses a 2 bit tag scheme internally. This change is
not visible at the language level, but it means that the Erlang emulator can
now address the entire 4Gb address space (OTP R6 could only address 1Gb).
IC-4.0.5
-
Limited support for multiple file module definitions.
The current version supports multiple file module definitions for all
backends except the C oriented backends.
-
The following new datatypes are now handled by IC:
- long long
- unsigned long long
- wchar
- wstring
Kernel-2.6.1
-
On Unix, os:cmd/1 previously used a dedicated subprocess, which
meant that calls to os:cmd/1 were serialized. This is no longer
the case.
-
The gen_ family (mainly gen_server and gen_fsm)
and rpc has been rewritten to use the new BIF
erlang:monitor/2 as much as possible. This should improve
performance and remove some possibilities of hanging gen_server calls.
In particular, gen_server:multi_call/2..4 and
rpc:multi_server_call/2,3 should now never hang, at least not when
all nodes are of this release.
See also the documentation for gen_server and rpc.
-
The inet driver (inet_drv, i.e the driver for (TCP&UDP)/IP) has
been replaced, as well as a lot of supporting Erlang code in the Kernel
application. The new code eliminates one data relay process per socket and
thereby gives a throughput boost.
STDLIB-1.9.1
-
The win32reg module has now been documented and made official.
The module makes it possible to access and manipulate the registry on
Windows platforms.
-
Calls using gen_server, gen_fsm and
gen_event
to a process on another node no longer hang indefinitely if the timeout
is infinity and the process doesn't exist. The exit reason in
that case is noproc (for local processes, this change was made
already in OTP R5).
-
The new module beam_lib reads data from BEAM files.
Appmon-2.0.1
-
There is now an Appmon User's Guide.
-
The main window is now similar to that of the other tools, showing only
one node at a time.
Asn1-1.2.9.3
-
The ASN.1 language feature COMPONENTS OF is now implemented.
-
The encoding and decoding of ENUMERATED and INTEGER with NamedNumbers is
made more efficient and thus faster in runtime.
-
The compiler now also supports AUTOMATIC TAGS for BER (previously only
for PER).
Comet-1.0
Comet is a new application.
Comet, a COM client for Erlang, is a way to call any COM-service in
Windows from an Erlang program. It's a combination of a gen_server and
a port program (or port driver) that enables Erlang programs to call almost
any COM-server.
Comet uses a gen_server in the module erl_com, together with a
port program (or port driver), to call COM-servers. Both the late-binding
interface IDispatch and early-binding virtual interfaces can be used.
Erlang types are converted to COM types and parameters are returned.
COM stands for Component Object Model, (or sometimes Common Object Model),
and is MicroSoft's technique for component-based programming. It allows
programs on Windows systems to call other programs and libraries across
language boundaries. It is a competitor to Corba, but has other functionality
too.
COM is available on all 32-bit Windows systems, such as NT 4, Windows
95,Windows 98 and Windows 2000. Comet can be used on any of these.
With Comet, an Erlang application can use (almost) any COM-service on
Windows from Erlang. Examples of what can be done include:
-
Opening webpages with Internet Exporer (or Netscape)
-
Reading and writing data from Excel Worksheet
-
Reading and writing from Word
-
Calling C-code-libraries in an efficient way, without the hassle of creating
a port-driver.
-
Executing scripts in VBScript or JavaScript
Compiler-3.0.1
-
The compiler builds lists and tuples in a smarter way than previous versions
did, meaning that literal lists and tuples of practically any size can now
be built. The previous limit was 1024 elements in a literal list or tuple.
-
Several changes has been made to the garbage collector and internal memory
allocation routines to reduce memory consumption and memory fragmentation.
Also, the compiler now makes sure that references to any data that will
not be used again will be killed, so that the garbage collector can discard
it as soon as possible.
-
It is now allowed to use an expression within a pattern, if the expression
uses only numeric or bitwise operators, and can be evaluated to a constant
at compile-time. E.g.,
case X of {1+2, T} -> T end.
-
The bit syntax, a language addition for constructing and matching binaries.
For more infomation, see Extensions to Erlang. Also, the handling of
small binaries (up to 64 bytes) has been optimised, as well as splitting of
binaries.
-
The compiler now supports inlining within a module, see the compiler
documentation.
Numerous known problems and limitations have been corrected, and the
optimisation is better. For instance, tuples used in cases for grouping
are no longer built.
The earlier compiler versions v1 (R5) and v2 (R6) have been discontinued
because there are no longer any reason to use them.
Inets-2.5.3
-
It is now possible to run more than one HTTP server in an Erlang
node listening to the same port but different addresses.
Jinterface-1.2
-
A new class, AbstractConnection, has been added to deal with most of the
aspects of the Erlang communication protocol, and which can be subclassed
in order to provide different levels of support to the application
as necessary. OtpConnection is now a subclass to AbstractConnection.
-
OtpCookedConnection is a new subclass to AbstractConnection, which together
with OtpNode provides an intuitive mailbox-based communication mechanism.
By using this interface, applications are no longer required to manage
connections explicitly, since the OtpNode now opens and manages connections
to remote nodes as needed. Outgoing messages are sent through mailboxes
and automatically dispatched through the correct connections to the
destination node, while incoming messages are queued in the destination
mailbox. This allows parts of an application to communicate with several
peers simultaneously without the need to sort and dispatch incoming messages.
Additionally, mailboxes can be linked with Erlang processes or with each
other, in much the same manner that Erlang processes can be linked together.
Mnesia-3.9.2
-
Access to non-local tables avoids disc_only_replicas if possible.
-
A new configuration parameter fallback_error_function has been
introduced to let the user handle the case when Mnesia has a fallback
installed and another Mnesia goes down. The default behavior
is as it always been: to kill itself to avoid inconsistencies. The user
can now start Erlang with -mnesia fallback_error_function '{UserMod,UserFunc}'.
Orber-3.1.8
-
Earlier, Orber did not use the IIOP/GIOP version specified in an external
object key when invoking an intra-ORB request.
-
The OMG standard now supports an Interoperable Naming Service. Initially,
there where two proposals of which Orber earlier supported one of them.
Now both standards are supported.
-
It is now possible to start Orber as lightweight.
-
It is now possible to create pseudo objects, i.e., not server objects.
cosNotification-1.0.2
cosNotification is a new application which implements the CORBA (OMG)
Notification service.
cosTime-1.0.1
cosTime is a new application which implements the CORBA (OMG) Time service.
SNMP-3.2.1
-
Debugging has been improved. It is now possible to debug all named processes
(individually) of the SNMP application. See the documentation for the
snmp module for details.
-
Filter (audit trail) logs on timestamp.
-
The MIB-compiler has been improved. It is now possible to include
Description-field into compiled MIB.
Tools-1.6.1
-
Xref is a new very capable cross reference tool which works with beam files
as input, works fast and eliminates the problem that the old tool Exref
had with include files.
Xref is intended to replace Exref in forthcoming versions of Erlang/OTP.
-
Eprof has been optimised to minimise the measuring overhead.
Typically, the measured program runs at about 50% of its ordinary speed.