Erlang er et funktionelt programmeringssprog designet til at bygge skalerbare og fejltolerante systemer, især inden for området for samtidige, distribuerede applikationer. Det blev oprindeligt udviklet af Ericsson i slutningen af 1980'erne for at skabe robuste telekommunikationssystemer. Erlangs unikke funktioner inkluderer støtte til letvægtsprocesser, meddelelsesbaseret samtidighed, hot code swapping og en stærk vægt på pålidelighed. I dag anvendes det bredt i industrier, der kræver høj tilgængelighed og distribuerede systemer, såsom telekommunikation, beskedapplikationer og databasesystemer.
Erlang blev skabt i slutningen af 1980'erne af Joe Armstrong, Robert Virding og Mike Williams hos Ericsson, primært for at imødekomme behovene i telekommunikationsindustrien. Sproget blev udviklet for at lette konstruktionen af store, fejltolerante systemer, der kunne håndtere flere opkald og forbindelser samtidigt.
I begyndelsen af 1990'erne anerkendte Ericsson Erlangs potentiale ud over telekommunikation. I 1998 blev Erlang frigivet som open source, hvilket gjorde det muligt for et bredere fællesskab af udviklere at bidrage til dets vækst. Open source-bevægelsen førte til udviklingen af BEAM virtuelle maskine, som udfører Erlang-kode og siden er blevet udviklet til at understøtte andre sprog.
Erlang vedligeholdes i øjeblikket af Erlang/OTP-teamet og har et dedikeret fællesskab. Udgivelsescyklussen for Erlang er blevet mere konsekvent, med regelmæssige opdateringer og forbedringer fokuseret på ydeevne, nye funktioner og forbedret dokumentation. Sproget har også inspireret udviklingen af Elixir, et moderne programmeringssprog, der kører på Erlang VM og inkorporerer mange af dets principper, samtidig med at det tilbyder yderligere funktioner.
Erlang er primært et funktionelt sprog, hvilket betyder, at funktioner er førsteklasses borgere og kan sendes rundt som variabler.
double(X) -> X * 2.
Erlangs letvægtsprocesser muliggør oprettelse af tusindvis af samtidige processer uden betydelig overhead.
spawn(fun() -> io:format("Hej fra en proces!~n") end).
Processer i Erlang kommunikerer ved hjælp af meddelelsesoverførsel, hvilket muliggør sikker kommunikation uden delt tilstand.
Pid = spawn(fun() -> receive
{msg, Content} -> io:format("Modtaget: ~s~n", [Content])
end end),
Pid ! {msg, "Hej!"}.
Erlang bruger mønster matching, en kraftfuld funktion, der muliggør klar og præcis kode.
match(X) when X > 0 -> io:format("Positivt tal: ~B~n", [X]);
match(X) -> io:format("Ikke-positivt tal: ~B~n", [X]).
Erlang understøtter fejltolerance gennem sin "lad det crashe"-filosofi, der tillader processer at fejle og blive genstartet uden at påvirke systemet.
start_process() ->
spawn(fun() -> crash() end).
Erlang giver udviklere mulighed for at ændre kode i kørende systemer uden at stoppe dem.
%% Gammel version
-module(example).
-export([hello/0]).
hello() -> io:format("Gammel Version~n").
%% Ny version
-module(example).
-export([hello/0]).
hello() -> io:format("Ny Version~n").
Data i Erlang er immutable, hvilket fører til færre fejl og lettere ræsonnering om koden.
List = [1, 2, 3],
NewList = [4 | List].
Erlang har funktioner, der muliggør nem distribution af processer på tværs af forskellige noder.
net_adm:start() ->
net_adm:ping('other_node@hostname').
Erlang understøtter record typer til at oprette strukturerede datatyper.
-record(person, {name, age}).
Person = #person{name="Alice", age=30}.
Erlang tillader listeforståelser til at generere og manipulere lister kortfattet.
Squares = [X*X || X <- [1,2,3]].
Erlang udføres på BEAM virtuelle maskine, som er designet til at køre samtidige og fejltolerante applikationer. BEAM optimerer ydeevnen og muliggør funktioner som hot code swapping.
Der er flere udviklingsmiljøer for Erlang, hvor Emacs og IntelliJ IDEA (med Erlang-plugin) er blandt de mest populære. Andre bemærkelsesværdige værktøjer inkluderer Erlang-specifikke redaktører som Erlide.
For at oprette et Erlang-projekt bruger man traditionelt værktøjet rebar3
, som håndterer afhængigheder og bygninger. For eksempel, for at oprette et nyt projekt, ville du udføre:
rebar3 new app myapp
Derefter kan du bygge projektet med:
rebar3 compile
Erlang anvendes bredt inden for telekommunikation, beskedssystemer og realtidsapplikationer. Bemærkelsesværdige applikationer inkluderer:
Erlangs primære styrker ligger i dets samtidighedsmodel og fejltolerance, hvilket adskiller det fra sprog som:
At oversætte kode til og fra Erlang kan være komplekst på grund af dets unikke paradigmer. Værktøjer som erl2cpp
findes til visse oversættelser, men der er ikke noget udbredt automatiseret værktøj til alle sprog. Manuel oversættelse kan involvere: