@@@STARTPACK(erlang;Erlang Programming Language)

<P>
@@@UW2DIST(uw7/devtools/erlang/)
@@@SOURCE(http://www.erlang.org/download.html)
@@@HOMEPAGE(http://www.erlang.org)
<P>

Erlang is a programming language which has many features more commonly
associated with an operating system than with a programming language: concurrent
processes, scheduling, memory management, distribution, networking, etc.

<p>
The initial open-source Erlang 
release contains the implementation of
Erlang, as well as a large part of Ericsson's  middleware
for building distributed high-availability systems.

<p>
Erlang is characterized by the following features:

<p><b>Concurrency</b> - Erlang has extremely lightweight processes whose
memory requirements can vary dynamically. Processes have no shared memory
and communicate by asynchronous message passing. Erlang supports applications
with very large numbers of concurrent processes. No requirements for concurrency
are placed on the host operating system.
<p><b>Distribution</b> - Erlang is designed to be run in a distributed
environment. An Erlang virtual machine is called an Erlang node. A distributed
Erlang system is a network of Erlang nodes (typically one per processor).
An Erlang node can create parallel processes running on other nodes, which
perhaps use other operating systems. Processes residing on different nodes
communicate in exactly the same was as processes residing on the same node.

<p><b>Robustness</b> - Erlang has various error detection primitives which
can be used to structure fault-tolerant systems. For example,
processes can monitor the status and activities of other processes,
even if these processes are executing on other nodes. Processes in a distributed
system can be configured to fail-over to other nodes in case of failures
and automatically migrate back to recovered nodes.
<p><b>Soft real-time</b> - Erlang supports programming "soft" real-time
systems, which require response times in the order of milliseconds. Long
garbage collection delays in such systems are unacceptable, so Erlang uses
incremental garbage collection techniques.
<p><b>Hot code upgrade</b> - Many systems cannot be stopped for software
maintenance. Erlang allows program code to be changed in a running system.
Old code can be phased out and replaced by new code. During the transition,
both old code and new code can coexist. It is thus possible to install
bug fixes and upgrades in a running system without disturbing its operation.
<p><b>Incremental code loading</b> - Users can control in detail how code
is loaded. In embedded systems, all code is usually loaded at boot time.
In development systems, code is loaded when it is needed, even when the
system is running. If testing uncovers bugs, only the buggy code need
be replaced.
<p><b>External interfaces</b> - Erlang processes communicate with the outside
world  using the same message passing mechanism as used between Erlang processes.
This mechanism is used for communication
with the host operating system and for interaction with programs written
in other languages. If required for reasons of efficiency, a special version
of this concept allows e.g. C programs to be directly linked into the Erlang
runtime system. 


<h2>
Components</h2>
Open-source Erlang comes with several standalone components that can be
used as building blocks when developing applications. These components
understands Erlang's systems messages (load, unload, start, stop, restart,
change code).
<p><b>Inets</b> - HTTP 1.0 server and FTP client.
<p><b>Mnesia</b> - Distributed real-time database for Erlang. Supports
RAM-replication as well as disk storage, allows dynamic schema changes,
allows arbitrarily complex data structures to be stored. Mnesia is very
fast since it runs in the same address space as the applications that use
it - this is possible since both Mnesia and the applications are written
in Erlang. Mnesia is  a nice example of the power of Erlang: in how
many languages could you write a fully-featured industrial-strength distributed
DBMS in less than 20,000 lines of code?

<p><b>Orber</b> - CORBA v2.0 Object Request Broker (ORB).
<p><b>SNMP</b> - Extensible SNMP v1/v2 agent and MIB compiler.
<h2>
Tools and Libraries</h2>
Open-source Erlang comes with a library of useful tools:
<p><b>Appmon</b> - Graphical monitoring of process groups (locally and
on remote nodes).
<p><b>ASN.1</b> - Compile-time and runtime package which supports the
ASN.1 Basic Notation and the encoding rules BER and PER.
<p><b>Compiler</b> - Erlang compiler.
<p><b>Debugger</b> - Graphical Erlang debugger.
<p><b>ERTS</b> - Erlang runtime system, including the virtual machine, 
the garbage collector, and the port mapper daemon.
<p><b>GS</b> - Library for writing graphical user interfaces.
<p><b>IC</b> - Compiler from OMG's Interface Definition Language (IDL)
to Erlang and C.
<p><b>Jive</b> - Support for calling Java from Erlang and vice versa.
<p><b>Kernel</b> - C code necessary to run the Erlang system: Erlang built-in
functions (BIFs); code, boot and name servers; networking and distribution
support; loaders, linkers and loggers; OS and file system interfaces.
<p><b>MESH</b> - Measurement handling, including an SNMP MIB.
<p><b>Mnemosyne</b> - Optional query language for Mnesia.
<p><b>Mnesia Session</b> - Foreign languages interface to Mnesia defined
in IDL, providing Mnesia access via the IIOP and erl_interface protocols.
<p><b>OS monitor (OS_MON)</b> - Monitoring of CPU, disk and memory utilization,
including SNMP v1/v2 MIBs. Interfaces to Solaris <tt>syslogd</tt> and Windows
NT event log.
<p><b>Parse tools</b> - LALR-1 parser generator for Erlang (yecc), similar
to yacc. Yecc takes a BNF grammar definition as input, and produces Erlang
code for a parser as output. Yecc is used to generate the Erlang parser.
<p><b>PMan</b> - Tool for tracing and viewing the state of Erlang processes
(locally or on remote nodes).
<p><b>SASL</b> - Progress/error/crash report handling, report browsing,
release handling, overload regulation.
<p><b>Stdlib</b> - Libraries for: input/output; incore and disk-based table
storage (ETS and DETS); graphs, dictionaries, lists, strings, sets, queues;
regular expressions; math. Erlang interpreter, tokenizer, parser, lint
and pretty-printer. Generic frameworks for fault-tolerant servers, event
handlers, state machines, and process supervisors. Etc, etc.
<p><b>Table visualizer</b> - Tool for viewing ETS and Mnesia tables.
<p><b>Toolbar</b> - Simplifies access to the Erlang Tools.
<p><b>Tools</b> - Coverage analyser, profiler, text-based tracer, Emacs
mode, Emacs TAGS file generator, make utility, call graph utility.
<p><b>Xref</b> - Provides statistics on cross referencing between modules
and functions.
</P>

@@@ENDPACK

