Erlang (programming language)
Erlang (programming language)
Erlang is a general-purpose, concurrent, functional programming language, as well as a garbage-collected runtime system. It was designed by Ericsson to support distributed, fault-tolerant, soft-real-time, and non-stop applications. Erlang is known for its lightweight concurrency model based on the Actor model, which allows thousands or even millions of concurrent processes to run efficiently.
The language was originally proprietary, but was released as open source in 1998. It has since gained a strong following outside Ericsson, especially in telecommunications, messaging, and web development. The BEAM virtual machine, which runs Erlang code, also supports the Elixir language.
History
Erlang was developed in the late 1980s at the Ericsson Computer Science Laboratory by Joe Armstrong, Robert Virding, and Mike Williams. The name is widely believed to be a reference to the Danish mathematician Agner Krarup Erlang or an abbreviation of "Ericsson Language". The first version was implemented in Prolog, but by 1990 a more efficient virtual machine was designed.
In 1996, Ericsson's AXE telephone exchanges began using Erlang for new subsystems. The language was open-sourced in 1998 to prevent it from being abandoned when Ericsson discontinued a proprietary version. The Open Telecom Platform (OTP) middleware library was released alongside the language and became an integral part of the Erlang ecosystem.
Features
- Concurrency and distribution: Erlang processes are isolated and communicate via message passing. The runtime handles scheduling, distribution, and failure detection transparently.
- Fault tolerance: "Let it crash" philosophy, with process supervision trees to restart failed components automatically.
- Hot code swapping: Code can be upgraded without stopping the system, a critical feature for telecommunication switches.
- Functional programming: Immutable data, pattern matching, higher-order functions, and single assignment variables.
- Memory management: Per-process garbage collection minimizes pause times and supports massive concurrency.
- OTP framework: Provides libraries for building robust, distributed systems, including gen_server, gen_statem, and supervisor behaviours.
Usage
Erlang is used in production systems requiring high availability and concurrency. Notable users include:
- Ericsson for telecom infrastructure
- WhatsApp for messaging servers
- RabbitMQ for message queuing
- CouchDB for document databases
- Discord for real-time communication services (using Erlang and Elixir)