Erlang è davvero un linguaggio modello attore?

13

Stavo leggendo questo articolo:

link

E lo menziona:

...in the actor model even an integer is represented as an actor...

Wikipedia conferma:

The Actor model adopts the philosophy that everything is an actor.

Erlang ha molti tipi di dati e quei tipi non sono attori, per quanto ne so io.

Non significa che Erlang non sia un linguaggio modello attore in un modo in cui alcuni dicono che, ad es. Java non è un linguaggio funzionale solo perché manca di alcune funzionalità di programmazione funzionale?

PS: per estensione vuol dire che Akka non è sicuramente un modello di attore, perché oltre ai tipi di dati non-attore provenienti dalla lingua ospite permette anche agli attori ereditari di estendere il loro comportamento attraverso le strutture della lingua ospite.

    
posta Den 26.03.2015 - 15:13
fonte

1 risposta

32

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.

    
risposta data 26.03.2015 - 15:49
fonte

Leggi altre domande sui tag