Erlang to język programowania funkcyjnego zaprojektowany do budowy skalowalnych i odpornych na błędy systemów, szczególnie w dziedzinie aplikacji współbieżnych i rozproszonych. Został pierwotnie opracowany przez firmę Ericsson pod koniec lat 80. XX wieku w celu stworzenia solidnych systemów telekomunikacyjnych. Unikalne cechy Erlanga obejmują wsparcie dla lekkich procesów, współbieżność opartą na przesyłaniu wiadomości, gorące przełączanie kodu oraz silny nacisk na niezawodność. Dziś jest szeroko stosowany w branżach wymagających wysokiej dostępności i systemów rozproszonych, takich jak telekomunikacja, aplikacje do przesyłania wiadomości i systemy baz danych.
Erlang został stworzony pod koniec lat 80. XX wieku przez Joe Armstronga, Roberta Virdinga i Mike'a Williamsa w firmie Ericsson, głównie w celu zaspokojenia potrzeb przemysłu telekomunikacyjnego. Język został opracowany, aby ułatwić budowę dużych, odpornych na błędy systemów, które mogłyby jednocześnie zarządzać wieloma połączeniami i rozmowami.
Na początku lat 90. XX wieku firma Ericsson dostrzegła potencjał Erlanga poza telekomunikacją. W 1998 roku Erlang został wydany jako open source, co pozwoliło szerszej społeczności programistów przyczynić się do jego rozwoju. Ruch open-source doprowadził do opracowania maszyny wirtualnej BEAM, która wykonuje kod Erlanga i od tego czasu ewoluowała, aby wspierać inne języki.
Erlang jest obecnie utrzymywany przez zespół Erlang/OTP i ma dedykowaną społeczność. Cykl wydania Erlanga stał się bardziej regularny, z regularnymi aktualizacjami i ulepszeniami skoncentrowanymi na wydajności, nowych funkcjach i ulepszonej dokumentacji. Język zainspirował również rozwój Elixira, nowoczesnego języka programowania, który działa na maszynie wirtualnej Erlanga i wprowadza wiele jego zasad, jednocześnie oferując dodatkowe funkcje.
Erlang jest przede wszystkim językiem funkcyjnym, co oznacza, że funkcje są obywatelami pierwszej klasy i mogą być przekazywane jak zmienne.
double(X) -> X * 2.
Lekkie procesy Erlanga umożliwiają tworzenie tysięcy współbieżnych procesów bez znaczącego narzutu.
spawn(fun() -> io:format("Witaj z procesu!~n") end).
Procesy w Erlangu komunikują się za pomocą przesyłania wiadomości, co pozwala na bezpieczną komunikację bez współdzielonego stanu.
Pid = spawn(fun() -> receive
{msg, Content} -> io:format("Odebrano: ~s~n", [Content])
end end),
Pid ! {msg, "Cześć!"}.
Erlang wykorzystuje dopasowywanie wzorców, potężną cechę, która pozwala na jasny i zwięzły kod.
match(X) when X > 0 -> io:format("Liczba dodatnia: ~B~n", [X]);
match(X) -> io:format("Liczba niedodatnia: ~B~n", [X]).
Erlang wspiera odporność na błędy poprzez swoją filozofię "niech się zawali", pozwalając procesom na awarię i ponowne uruchomienie bez wpływu na system.
start_process() ->
spawn(fun() -> crash() end).
Erlang pozwala programistom na zmianę kodu w działających systemach bez ich zatrzymywania.
%% Stara wersja
-module(example).
-export([hello/0]).
hello() -> io:format("Stara wersja~n").
%% Nowa wersja
-module(example).
-export([hello/0]).
hello() -> io:format("Nowa wersja~n").
Dane w Erlangu są niemutowalne, co prowadzi do mniejszej liczby błędów i łatwiejszego rozumienia kodu.
List = [1, 2, 3],
NewList = [4 | List].
Erlang ma funkcje, które umożliwiają łatwe rozprzestrzenianie procesów na różnych węzłach.
net_adm:start() ->
net_adm:ping('other_node@hostname').
Erlang wspiera typy rekordów do tworzenia złożonych typów danych.
-record(person, {name, age}).
Person = #person{name="Alice", age=30}.
Erlang pozwala na zrozumienia list, aby generować i manipulować listami w sposób zwięzły.
Squares = [X*X || X <- [1,2,3]].
Erlang jest wykonywany na maszynie wirtualnej BEAM, która jest zaprojektowana do uruchamiania aplikacji współbieżnych i odpornych na błędy. BEAM optymalizuje wydajność i pozwala na funkcje takie jak gorące przełączanie kodu.
Istnieje kilka środowisk programistycznych dla Erlanga, z Emacsem i IntelliJ IDEA (z wtyczką Erlang) wśród najpopularniejszych. Inne godne uwagi narzędzia to edytory specyficzne dla Erlanga, takie jak Erlide.
Aby stworzyć projekt Erlang, tradycyjnie używa się narzędzia rebar3
, które zarządza zależnościami i kompilacjami. Na przykład, aby stworzyć nowy projekt, należy wykonać:
rebar3 new app myapp
Następnie można zbudować projekt za pomocą:
rebar3 compile
Erlang jest szeroko stosowany w telekomunikacji, systemach przesyłania wiadomości i aplikacjach czasu rzeczywistego. Do znanych aplikacji należą:
Główne mocne strony Erlanga leżą w jego modelu współbieżności i odporności na błędy, co odróżnia go od języków takich jak:
Tłumaczenie kodu do i z Erlanga może być skomplikowane z powodu jego unikalnych paradygmatów. Istnieją narzędzia takie jak erl2cpp
do niektórych tłumaczeń, ale nie ma powszechnie dostępnego zautomatyzowanego narzędzia dla wszystkich języków. Ręczne tłumaczenie może obejmować: