Erlang programming language

From Elixir Wiki
Jump to navigation Jump to search

Erlang programming language[edit]

Erlang Logo

Erlang is a programming language designed for building concurrent, fault-tolerant systems. Developed at Ericsson in the late 1980s, Erlang gained popularity for its ability to handle distributed and real-time applications.

Features[edit]

History[edit]

Erlang was created by Joe Armstrong, Robert Virding, and Mike Williams at Ericsson to improve the efficiency and reliability of telecommunication systems. It was first released as a proprietary language in 1986 and later open-sourced in 1998.

Syntax[edit]

Erlang blends functional and imperative programming styles. Its syntax is compact and uses pattern matching extensively. The following "Hello, World!" example demonstrates the basic syntax of Erlang:

-module(hello_world).
-export([hello/0]).

hello() ->
    io:format("Hello, World!~n").

Concurrency[edit]

Concurrency is a fundamental feature in Erlang. It is achieved through lightweight processes known as Erlang processes. These processes can communicate via message passing, allowing for efficient and concurrent programming.

-module(concurrency_example).
-export([start/0, worker/1]).

start() ->
    Pid = spawn(?MODULE, worker, [5]),
    Pid ! {self(), double},
    receive
        {Pid, Result} -> io:format("Doubled value: ~w~n", [Result])
    end.

worker(N) ->
    receive
        {From, double} -> From ! {self(), N * 2}
    end.

Fault Tolerance[edit]

Another key aspect of Erlang is its built-in fault-tolerant capabilities. By using supervisors and behaviors from OTP, Erlang applications can automatically recover from failures and continue running without interruptions.

-module(fault_tolerance_example).
-export([start/0, worker/0, crash/0]).

start() ->
    {ok, Pid} = supervisor:start_link({local, ?MODULE}),
    {ok, _} = supervisor:start_child(Pid, [?MODULE, worker, []]),
    io:format("Supervisor started.~n").

worker() ->
    io:format("Worker process started.~n"),
    loop().

crash() ->
    exit(crash).

loop() ->
    receive
        _ -> loop()
    end.

Libraries and Frameworks[edit]

Erlang provides a rich ecosystem of libraries and frameworks. Some notable ones include:

  • Erlang/OTP: The Erlang/OTP platform provides a comprehensive set of libraries, tools, and design principles to build scalable and fault-tolerant systems.
  • Cowboy: A small, fast, and modern HTTP server for Erlang/OTP, suitable for building web applications and RESTful APIs.
  • Riak: A distributed NoSQL database written in Erlang, designed to handle large-scale, fault-tolerant applications.
  • Elixir: A dynamic, functional language built on top of Erlang that brings a more approachable syntax and powerful metaprogramming capabilities to the Erlang ecosystem.

See also[edit]

References[edit]

Template:Reflist