Erlang is a general-purpose development environment, particularly well-suited to fault-tolerant, concurrent, distributed, soft real-time applications.
Erlang is a strict, dynamically typed
FunctionalProgramming language with a declarative syntax and powerful yet simple support for
ConcurrentProgramming, using an asynchronous message passing mechanism based on
ActorsModel.
Erlang is compiled to bytecode which runs in a
VirtualMachine. It comes complete with development tools (compiler, debugger, profiler), libraries and applications including the
MnesiaDatabase, an HTTP server and a CORBA ORB.
Erlang is developed and supported by the Ericsson
ComputerScience lab, which has distributed it freely under an
OpenSource license since 1998. Its principal inventor was
JoeArmstrong.
See
ErlangCodeExamples.
Erlang is not
ObjectOriented in the usual sense. There are no classes,
no inheritance, and in keeping with
FunctionalProgramming tradition,
data structures are separate from functions.
On the other hand, Erlang offers
processes, which are like threads
except that they are completely isolated from each other and may only
communicate by sending and receiving asynchronous messages. These
Erlang processes are ideal to represent physical models, and in many
ways satisfy the
NygaardClassification better than most traditional
ObjectOriented languages. These concurrent processes are polymorphic,
in that any process which responds to a set of messages (an alphabet,
in CSP parlance), may be transparently substituted for
another. Processes also have an identity (a unique, unforgeable
process id). Code, in the form of functions, may easily be reused by
different processes.
Erlang also offers
behaviors, which are similar to Java
interfaces: a module conforms to a behavior if it offers a set of
functions.
So Erlang in fact offers considerable support for modeling the code
as objects. However, Erlang developers tend to model as processes only
objects that have behavior (and possibly state), unlike
SmalltalkLanguage or
JavaLanguage developers who must model everything
as one. In particular, Erlang data types are not objects.
I recently used Erlang for a small statistical project, and while I've played with it before, using it in a real application is even better. It's like a wonderful mix of Haskell and Python, with a big chunk of Prolog thrown in just for fun. It DOES have certain parts that make you say "hunh, that's weird", but they are far outnumbered by the bits that make you stop for a second and go "...oooooo. Shiny." --
SimonHeath
---
Also see:
http://www.erlang.org,
CompaniesUsingErlang,
WingsThreeDee,
SmugErlangWeenie, Erlang wiki (
http://erlang.sics.se:5000/)
Erlang developers on the Wiki:
LukeGorrie,
DominicWilliams, ...
There is a
ComprehensiveErlangArchiveNetwork (CEAN)
CategoryPlatform CategoryProgrammingLanguage CategoryFunctionalProgramming CategoryConcurrency