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.

Mai multe informatii: