Erlang è davvero un linguaggio modello attore?


18

Stavo leggendo questo articolo:

http://www.doc.ic.ac.uk/~nd/surprise_97/journal/vol2/pjm2/

E menziona che:

... nel modello dell'attore anche un numero intero è rappresentato come attore ...

Wikipedia conferma:

Il modello Actor adotta la filosofia secondo cui tutto è attore.

Erlang ha molti tipi di dati e questi tipi non sono attori per quanto ne so.

Non significa che Erlang non è un linguaggio modello attore in un modo in cui alcune persone affermano che, ad esempio, Java non è un linguaggio funzionale solo perché manca di alcune funzionalità di programmazione funzionale?

PS: per estensione significa che Akka non è sicuramente un modello di attore perché oltre ai tipi di dati non di attore che provengono dalla lingua ospitante, consente anche di ereditare gli attori per estendere il loro comportamento attraverso le strutture della lingua ospitante.

Risposte:


39

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 si aspettano alcune differenze.

Seguirono però percorsi paralleli di evoluzione: il modello di attore è stato creato da Carl Hewitt sulla base del messaggio che passa la semantica di Smalltalk. Alan Kay, a sua volta, aveva basato il messaggio che passava la semantica di Smalltalk sulla valutazione guidata dagli obiettivi di PLANNER, progettata da ... Carl Hewitt.

PIANIFICATORE era il precursore di Prolog. Inizialmente Erlang non intendeva essere un linguaggio, piuttosto iniziò come una libreria per la programmazione distribuita a tolleranza d'errore in Prolog, e in seguito si evolse in un dialetto di Prolog, prima che diventasse la sua lingua, ancora oggi fortemente influenzato da Prolog (inoltre, l'interprete originale di Erlang è stato scritto in Prolog).

Quindi, le somiglianze tra Processes in Erlang, Objects in OO e Actors in the Actor Model sono tutt'altro che casuali.

Erlang è una lingua con diversi livelli, ognuno dei quali sono superset dei livelli inferiori. Il livello più piccolo è Functional Erlang . Questo è un linguaggio funzionale standard con alcune aggiunte ereditate da Prolog, come l'unificazione anziché l'associazione / uguaglianza. Se aggiungiamo Processi e Messaggi a questo, otteniamo l' Erang simultaneo . Avvia i processi remoti e ottieni Distributed Erlang . Ora aggiungi alcune librerie e modelli di progettazione dall'OTP e hai Erlang con tolleranza agli errori.

I processi sono attori. (Sono anche oggetti.) L' interno dei processi è funzionale, non basato sull'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 dispone di un'architettura orientata agli oggetti con attori che passano messaggi implementati utilizzando la programmazione funzionale. Ciò che OTP chiama a serverè strettamente correlato a un oggetto, serveri quali sono costituiti da processi (che sono attori), i processi utilizzano funzioni internamente.

In generale, non credo che nessun linguaggio attore puro abbia mai lasciato la ricerca. Cavolo, non so nemmeno se il PLASMA di Carl Hewitt, la lingua originale dell'attore, sia mai stato implementato.


4
Erlang è stato progettato anche da persone con un problema da risolvere, e quando ti trovi in ​​quella posizione, la purezza concettuale viene spesso sacrificata sull'altare della praticità.
Blrfl,

È interessante notare che il problema che stavano cercando di risolvere (affidabilità, replica, ridondanza, ...) è la stessa natura che stava cercando di risolvere quando si sono evolute le cellule. Alan Kay ha studiato microbiologia e ha esplicitamente modellato OO su cellule biologiche. Un altro parallelo.
Jörg W Mittag,

1
PLASMA è stato implementato in MacLisp. Era un linguaggio di ricerca in rapida evoluzione.
Jerry101,

1
Mi è davvero piaciuta questa risposta. Grazie @ JörgWMittag!
Felixyz,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.