Sebbene il modello di attore sia più vecchio di Erlang, i progettisti di Erlang hanno appreso del modello di attore solo dopo aver progettato Erlang, quindi ci sono alcune differenze da aspettarsi.
Hanno seguito percorsi paralleli di evoluzione, tuttavia: il modello attore è stato creato da Carl Hewitt sulla base della semantica del messaggio che passa per Smalltalk. Alan Kay, a sua volta aveva basato la semantica del messaggio che trasmetteva Smalltalk sulla valutazione basata su obiettivi di PLANNER, progettata da Carl Hewitt.
PLANNER era il precursore di Prolog. Inizialmente, Erlang non intendeva essere un linguaggio, ma iniziò come libreria per la programmazione distribuita fault-tolerant in Prolog, e in seguito si evolse in un dialetto di Prolog, prima che diventasse un suo linguaggio, ancora fino ad oggi strongmente influenzato da Prolog (inoltre, l'interprete originale di Erlang è stato scritto in Prolog).
Quindi, le somiglianze tra i processi in Erlang, gli oggetti in OO e gli attori nel modello di attore sono tutt'altro che casuali.
Erlang è una lingua con diversi livelli, ognuno dei quali è superset degli strati inferiori. Il livello più piccolo è Erlang funzionale . Questo è un linguaggio funzionale standard con alcune aggiunte ereditate da Prolog, come l'unificazione invece del legame / uguaglianza. Se aggiungiamo Processi e Messaggi , otteniamo Concorrente Erlang . Getta nei processi remoti e ottieni Erlang distribuito . Ora aggiungi alcune librerie e modelli di progettazione dall'OTP e hai Erlang con tolleranza d'errore.
I processi sono attori. (Sono anche oggetti.) Il interno dei processi è funzionale, non basato su attore. La struttura di un grande sistema Erlang tollerante ai guasti, costruito utilizzando gli strumenti e i modelli dell'OTP, è spesso molto orientato agli oggetti.
Quindi, dipende da quale scala stai guardando.
In un tipico sistema Erlang di grandi dimensioni, si ha un'architettura orientata agli oggetti con attori che trasmettono messaggi implementati utilizzando la programmazione funzionale. Ciò che OTP chiama server
è strettamente correlato a un oggetto, server
s è costituito da processi (che sono attori), i processi usano le funzioni internamente.
In generale, non credo che una pura Actor Language abbia mai lasciato la ricerca. Diamine, non so nemmeno se il PLASMA di Carl Hewitt, la lingua degli attori originale sia stata mai implementata.