Erlang este un limbaj de programare funcțional dezvoltat de Ericsson pentru utilizare în aplicații de telecomunicații. Deoarece au considerat că este inacceptabil ca un sistem de telecomunicații să aibă o perioadă de nefuncționare semnificativă, Erlang a fost conceput pentru a fi (printre altele):
- distribuite și tolerante la erori (o bucată de software sau hardware care nu funcționează nu ar trebui să dea jos sistemul)
- concurente (poate genera multe procese, fiecare executând o lucrare mică și bine definită și izolată una de alta, dar capabilă să comunice prin mesagerie)
- schimbabil la cald (codul poate fi schimbat în sistem în timp ce rulează, ceea ce duce la disponibilitate ridicată și timp minim de nefuncționare a sistemului)
Sintaxă
Erlang folosește intens recursivitate. Deoarece datele sunt imuabile în Erlang, utilizarea while
și for
buclele (în cazul în care o variabilă trebuie să-și schimbe în continuare valoarea) nu sunt permise.
Iată un exemplu de recursivitate, care arată cum o funcție dezbracă în mod repetat prima literă din partea din față a unui nume și o imprimă, oprindu-se doar când ultima literă a fost întâlnită.
-module(name).
-export([print_name/1]).
print_name([RemainingLetter | []]) ->
io:format("~c~n", [RemainingLetter]);
print_name([FirstLetter | RestOfName]) ->
io:format("~c~n", [FirstLetter]),
print_name(RestOfName).
Ieșire:
> name:print_name("Mike").
M
i
k
e
ok
Există, de asemenea, un accent puternic pe potrivire de model, care elimină frecvent necesitatea unui if
structura sau case
afirmație. În exemplul următor, există două potriviri pentru nume specifice, urmate de un catch-all pentru orice alte nume.
-module(greeting).
-export([say_hello/1]).
say_hello("Mary") ->
"Welcome back Mary!";
say_hello("Tom") ->
"Howdy Tom.";
say_hello(Name) ->
"Hello " ++ Name ++ ".".
Ieșire:
> greeting:say_hello("Mary").
"Welcome back Mary!"
> greeting:say_hello("Tom").
"Howdy Tom."
> greeting:say_hello("Beth").
"Hello Beth."
Depozitare la termen Erlang
Erlang Term Storage, prescurtat în mod normal ca ETS, este o bază de date în memorie încorporată în OTP. Este accesibil în Elixir și este o alternativă puternică la soluții precum Redis atunci când aplicația dvs. rulează pe un singur nod.
Pornire rapidă
Pentru a crea un tabel ETS trebuie mai întâi să inițializați un tabel tableName = :ets.new(:table_otp_name, [])
, după ce ați inițializat un tabel puteți: să inserați date, să căutați valori, să ștergeți date și multe altele.
Demo ETS în IEX
iex(1)> myETSTable = :ets.new(:my_ets_table, [])
#Reference<0.1520230345.550371329.65846>
iex(2)> :ets.insert(myETSTable, {"favoriteWebSite", "Routech"})
true
iex(3)> :ets.insert(myETSTable, {"favoriteProgrammingLanguage", "Elixir"})
true
iex(4)> :ets.i(myETSTable)
<1 > {<<"favoriteProgrammingLanguage">>,<<"Elixir">>}
<2 > {<<"favoriteWebSite">>,<<"Routech">>}
EOT (q)uit (p)Digits (k)ill /Regexp -->
Persistenţă
Tabelele ETS nu sunt persistente și sunt distruse odată cu încheierea procesului care îl deține. Dacă doriți să stocați date în mod persistent, se recomandă o bază de date tradițională și / sau stocare bazată pe fișiere.
Utilizați cazuri
Tabelele ETS sunt utilizate în mod obișnuit pentru stocarea în cache a datelor din aplicație, de exemplu datele contului preluate dintr-o bază de date pot fi stocate într-un tabel ETS pentru a reduce cantitatea de interogări către baza de date. Un alt caz de utilizare este pentru limitarea ratei de utilizare a funcțiilor într-o aplicație web – viteza rapidă de citire și scriere a ETS o face excelentă pentru acest lucru. Tabelele ETS sunt un instrument puternic pentru dezvoltarea de aplicații web extrem de concurente la cel mai mic cost hardware posibil.
Încearcă
Există site-uri web unde puteți încerca să rulați comenzi Erlang fără a fi nevoie să instalați nimic la nivel local, precum acestea:
Dacă doriți să îl instalați pe mașina dvs. (sau pe o mașină virtuală), puteți găsi fișierele de instalare la Erlang.org sau pe Erlang Solutions.