Erlang è un linguaggio di programmazione non orientato a contesti specifici ma in grado di lavorare con la programmazione concorrente; può gestire cioè più processi che interferiscono tra loro in esecuzione e su sistemi runtime, vale a dire senza due processi distinti per la compilazione e l'esecuzione ma con un unico processo di modifica ed esecuzione continua.
Erlang linguaggio di programmazione | |
---|---|
Autore | Ericsson |
Data di origine | 1986 |
Ultima versione | 27.2 (11 dicembre 2024) |
Paradigmi | programmazione funzionale |
Tipizzazione | dinamica |
Estensioni comuni | .erl, .hrl |
Influenzato da | Prolog, Smalltalk |
Ha influenzato | F#, Clojure, Rust, Scala, Opa, Reia, Elixir |
Implementazione di riferimento | |
Implementazione | interprete |
Sistema operativo | Multipiattaforma |
Lingua | en |
Licenza | MPL modificata |
Sito web | www.erlang.org/ |
Fu progettato per gestire applicazioni non-stop, distribuite e stabili. Da quando è uscita una versione open-source nel 1998 è stato adottato da varie compagnie multinazionali come la Nortel e T-Mobile.
Il "sottoinsieme sequenziale di Erlang" è un linguaggio funzionale, a valutazione rigida, non polimorfo e con typing dinamico.
Esempi
Il codice ha il seguente aspetto:
-module(fact).
-export([fac/1]).
fac(0) -> 1;
fac(N) when N > 0 -> N * fac(N-1).
Qui di seguito una implementazione dell'algoritmo di ordinamento veloce 'quicksort'
%% quicksort(List)
%% Sort a list of items
-module(quicksort).
-export([qsort/1]).
qsort([]) -> [];
qsort([Pivot|Rest]) ->
qsort([ X || X <- Rest, X < Pivot]) ++ [Pivot] ++ qsort([ Y || Y <- Rest, Y >= Pivot]).
L'esempio di cui sopra richiama ricorsivamente la funzione
qsort
fino a quando non c'è più nulla da ordinare.
L'espressione
[ X || X <- Rest, X < Pivot]
può essere letta come un
- "L'insieme di tutte le
X
per le qualiX
è un membro diRest
eX
è minore diPivot
",
ciò finisce col divenire un modo molto facile per gestire le liste.
Dal momento che è possibile valutare una qualsiasi espressione booleana tra due differenti tipi, il calcolo è diretto, per esempio 1 < a
restituirà true
.
In ogni caso è anche possibile generalizzare la funzione vista sopra per ottenere un ordinamento diverso da quello canonico, l'ordine crescente. Infatti, passando come argomento una funzione di confronto, il programmatore potrà invocare più volte la stessa funzione ma con criteri di ordinamento diversi.
Ecco un esempio di codice nel quale si ordina una lista di liste in base alla loro lunghezza:
-module(listsort).
-export([by_length/1]).
by_length(Lists) ->
F = fun(A,B) when is_list(A), is_list(B) ->
length(A) < length(B)
end,
qsort(Lists, F).
qsort([], _) -> [];
qsort([Pivot|Rest], Smaller) ->
qsort([ X || X <- Rest, Smaller(X, Pivot)], Smaller)
++ [Pivot] ++
qsort([ Y || Y <- Rest, not(Smaller(Y, Pivot))], Smaller).
Ciò non sarebbe possibile se il linguaggio non supportasse le funzioni di ordine superiore.
Software che fa uso di Erlang
Tra i programmi che fanno uso di Erlang troviamo:
- Web Server:
- Yaws, un server web
- Mochiweb, una libreria per costruire server web
- Misultin, una libreria per costruire server web
- Cowboy, un server web leggero
- Database (distribuiti):
- Chat:
- ejabberd, un server di Messaggistica istantanea basato su Extensible Messaging and Presence Protocol (XMPP)
- WhatsApp, parzialmente basato su ejabberd
- CMS:
- Zotonic, un Content Management System e Framework per applicazioni web
- Web-frameworks:
- ChicagoBoss, un Framework per applicazioni web simile a Ruby on Rails
- Code:
- RabbitMQ, un'implementazione di Advanced Message Queuing Protocol (AMQP)
- Desktop:
- Wings 3D, un modellatore 3D.
Altri progetti
- Wikimedia Commons contiene immagini o altri file su Erlang
Collegamenti esterni
- (EN) Sito ufficiale, su erlang.org.
- Erlang, su packages.debian.org.
- Repository sorgenti di Erlang, su github.com.
- (EN) Erlang Community Site, su trapexit.org. URL consultato il 2 dicembre 2007 (archiviato dall'url originale il 6 agosto 2013).
- (EN) Mailing Lists and FAQ for the Erlang Community, su erlang.org. URL consultato il 6 dicembre 2004 (archiviato dall'url originale il 13 giugno 2006).
- (EN) The Original Erlang wiki, su erlang.sics.se:5000. URL consultato il 6 dicembre 2004 (archiviato dall'url originale il 10 ottobre 2004).
- (EN) A collaborative portal for the Erlang community, su erlang-projects.org. URL consultato il 6 dicembre 2004 (archiviato dall'url originale il 24 febbraio 2003).
- (EN) Licensed and supported implementation Archiviato il 15 aprile 2008 in Internet Archive..
- (EN) Worldwide training and consulting services, su erlang-solutions.com.
- (EN) The Anarchitech Cooperative, su anarchitech.org. URL consultato il 6 dicembre 2004 (archiviato dall'url originale il 6 dicembre 2004).
Controllo di autorità | LCCN (EN) sh93000031 · GND (DE) 4324177-3 · J9U (EN, HE) 987007544092105171 |
---|
Wikiwand in your browser!
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.