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ć: