Erlang (limbaj de programare)
Erlang limbaj de programare | |
---|---|
Autor | Ericsson |
Data de origine | 1986 |
Ultima versiune | R19.1 |
Paradigme | programare funcțională |
Tastare | dinamic |
Extensii comune | .erl .hrl |
Influențată de | Prolog , Smalltalk |
A influențat | F # , Clojure , Rust , Scala , Opa , Reia , Elixir |
Implementare referință | |
Implementare | interpret |
Sistem de operare | Multiplatform |
Limbă | ro |
Licență | MPL modificat |
Site-ul web | www.erlang.org/ |
Erlang este un limbaj de programare nu orientat către contexte specifice, dar capabil să funcționeze cu programare simultană ; adică poate gestiona mai multe procese care interferează între ele în execuție și pe sisteme de execuție , adică fără două procese distincte pentru compilare și execuție, dar cu un singur proces de modificare și execuție continuă.
A fost conceput pentru a gestiona aplicații non-stop, distribuite și stabile. De când a apărut o versiune open-source în 1998, a fost adoptată de diverse companii multinaționale, precum Nortel și T-Mobile .
„Subsetul secvențial al lui Erlang” este un limbaj funcțional , evaluat rigid , nepolimorf și tipat dinamic .
Exemple
Codul arată astfel:
- modul ( fapt ).
- export ([ fac / 1 ]).
fac ( 0 ) -> 1 ;
fac ( N ) când N > 0 -> N * fac ( N - 1 ).
Mai jos o implementare a „ algoritmului de sortare rapid„ rapid ”
%% quicksort (Listă)
%% Sortează o listă de articole
- modul ( quicksort ).
- export ([ qsort / 1 ]).
qsort ([]) -> [];
qsort ([ Pivot | Rest ]) ->
qsort ([ X || X <- Rest , X < Pivot ]) ++ [ Pivot ] ++ qsort ([ Y || Y <- Rest , Y > = Pivot ]).
Exemplul de mai sus apelează recursiv funcția qsort
până când nu mai rămâne nimic de sortat. Expresia
[ X || X <- Rest , X < Pivot ]
poate fi citit ca un
- „Setul tuturor
X
pentru careX
este membruRest
șiX
este mai mic decâtPivot
”,
aceasta ajunge să fie o modalitate foarte ușoară de a gestiona listele.
Deoarece este posibil să se evalueze orice expresie booleană între două tipuri diferite, calculul este simplu, de exemplu 1 < a
reveni true
.
În orice caz, este, de asemenea, posibilă generalizarea funcției văzute mai sus pentru a obține o ordine diferită de cea canonică, ordinea ascendentă. De fapt, prin trecerea unei funcții de comparație ca argument, programatorul poate invoca aceeași funcție de mai multe ori, dar cu criterii de sortare diferite.
Iată un exemplu de cod în care o listă de liste este sortată după lungimea lor:
- modul ( listsort ).
- export ([ by_length / 1 ]).
by_length ( Liste ) ->
F = fun ( A , B ) când is_list ( A ), is_list ( B ) ->
lungime ( A ) < lungime ( B )
sfarsit ,
qsort ( Liste , F ).
qsort ([], _) -> [];
qsort ([ Pivot | Rest ], mai mic ) ->
qsort ([ X || X <- Rest , Smaller ( X , Pivot )], Smaller )
++ [ Pivot ] ++
qsort ([ Y || Y <- Rest , not ( Smaller ( Y , Pivot ))], Smaller ).
Acest lucru nu ar fi posibil dacă limba nu ar accepta funcții de ordin superior .
Software care folosește Erlang
Printre programele care folosesc Erlang găsim:
- Server Web:
- Baze de date (distribuite):
- Cloudant , un serviciu de baze de date bazat pe BigCouch , un fork al CouchDB .
- CouchDB , un sistem non-relațional de gestionare a bazelor de date care folosește MapReduce
- Mnesia , o bază de date distribuită
- Riak , o bază de date distribuită
- SimpleDB , o bază de date distribuită care face parte din serviciile web Amazon
- Conversație:
- ejabberd , un server de mesagerie instant bazat pe Extensible Messaging and Presence Protocol (XMPP)
- WhatsApp , bazat parțial pe ejabberd
- CMS:
- Cadruri web:
- Cod:
- RabbitMQ , o implementare a Advanced Message Queuing Protocol (AMQP)
- Desktop:
- Wings 3D , un modelator 3D.
Alte proiecte
-
Wikimedia Commons conține imagini sau alte fișiere despre Erlang
linkuri externe
- ( EN ) Implementare open-source , pe erlang.org .
- ( EN ) Site-ul comunității Erlang , pe trapexit.org . Adus la 2 decembrie 2007 (arhivat din original la 6 august 2013) .
- ( EN ) Liste de corespondență și întrebări frecvente pentru Comunitatea Erlang , pe erlang.org .
- ( RO ) Wiki-ul original Erlang , la erlang.sics.se:5000 . Adus la 6 decembrie 2004 (arhivat din original la 10 octombrie 2004) .
- ( EN ) Un portal de colaborare pentru comunitatea Erlang , pe erlang-projects.org . Adus la 6 decembrie 2004 (arhivat din original la 24 februarie 2003) .
- (EN) Implementare licențiată și acceptată .
- ( RO ) Servicii de instruire și consultanță la nivel mondial , la erlang-solutions.com .
- ( EN ) Cooperativa Anarchitech , pe anarchitech.org .
Controlul autorității | LCCN (EN) sh93000031 · GND (DE) 4324177-3 |
---|