I processi in Erlang e gli oggetti in Smalltalk sono davvero la stessa cosa.
A prima vista, questo non è terribilmente sorprendente: Erlang è un linguaggio modello di attore . Il modello dell'attore è stato inventato da Carl Hewitt, che ha basato il modello di valutazione basato sui messaggi sul modello di valutazione basato sui messaggi di Smalltalk. (In realtà, attori e oggetti sono la stessa cosa; differiscono solo per alcuni dettagli.) Alan Kay, a sua volta, è stato influenzato da PLANNER di Carl Hewitt, quando ha progettato Smalltalk.
Quindi, c'è una stretta relazione tra attori e oggetti, e quindi non dovrebbe sorprendere che i processi di Erlang e gli oggetti di Smalltalk siano così simili.
Tranne una cosa: i progettisti di Erlang non sapevano del modello di attore !!! Ne hanno appreso solo in seguito, in particolare quando Joe Armstrong ha scritto la sua tesi di dottorato sotto Seif Haridi (coautore del libro definitivo sui paradigmi di programmazione) alla fine degli anni '90.
Joe Armstrong ha scritto un articolo in cui ha fortemente sostenuto OO ( Why OO Sucks ), ma in seguito ha cambiato idea quando si è reso conto che Erlang è in realtà molto orientato agli oggetti. In realtà, è persino arrivato al punto di affermare che Erlang è l' unico linguaggio orientato agli oggetti in questa intervista con Joe Armstrong e Ralph Johnson .
Questo è un caso interessante di ciò che i biologi evoluzionisti chiamerebbero evoluzione convergente , cioè due specie non correlate che si evolvono per essere simili in risposta a pressioni esterne simili.
Esistono ancora molte relazioni tra Erlang e Smalltalk:
Erlang iniziò come estensione della concorrenza a Prolog (e anche quando Erlang divenne il suo linguaggio separato, le prime implementazioni furono scritte in Prolog) ed è ancora oggi fortemente radicato in Prolog. Prolog è fortemente influenzato da PLANNER di Carl Hewitt.
Smalltalk fu anche fortemente influenzato da quello che sarebbe poi diventato l'ARPANet (e anche più tardi Internet); Erlang è stato progettato per sistemi in rete.
Tuttavia, una delle differenze importanti tra Erlang e Smalltalk è che non tutto è un processo. 1
è un numero, non un processo. Non è possibile inviare un messaggio a un numero.
Esistono più "livelli" di Erlang:
- Erlang funzionale : un linguaggio funzionale per lo più tipicamente tipicamente tipicamente dinamico con alcune "stranezze" ereditate da Prolog, ad esempio l'unificazione.
- Erlang simultaneo : Erlang funzionale + Processi e messaggi.
- Erlang distribuito : Erlang simultaneo + Processi remoti.
- Fault-Tolerant Erlang : Erlang distribuito + alcuni modelli di progettazione codificati nelle librerie OTP, ad esempio alberi supervisori e
gen_server
.
Un sistema Fault-Tolerant scritto in Erlang / OTP in genere assomiglia a qualcosa che potremmo riconoscere come "orientato agli oggetti". Ma l'interno di quegli oggetti sarà spesso implementato in uno stile più funzionale che orientato agli oggetti.
È interessante notare che la "pressione evolutiva" che Erlang stava affrontando, in altre parole, il problema che i progettisti di Erlang stavano cercando di risolvere (affidabilità, replicazione, ridondanza, ...) è la stessa pressione che ha portato all'evoluzione delle cellule. Alan Kay ha studiato microbiologia e ha esplicitamente modellato OO su cellule biologiche. Questo è un altro parallelo tra Erlang e Smalltalk.
Ho scritto un po 'su questo in un'altra mia risposta .