Procesy w Erlang i Obiekty w Smalltalk są w istocie tym samym.
Na pierwszy rzut oka nie jest to zaskakujące: Erlang jest językiem aktorskim . Model aktora został wynaleziony przez Carla Hewitta, który oparł model ewaluacyjny oparty na komunikatach na modelu ewaluacyjnym Smalltalk. (Naprawdę, Aktorzy i Przedmioty są tym samym; różnią się tylko niektórymi szczegółami.) Z kolei na Alana Kay wpłynął PLANER Carla Hewitta, kiedy zaprojektował Smalltalk.
Istnieje więc ścisły związek między aktorami i obiektami, dlatego nie powinno dziwić, że procesy Erlanga i obiekty Smalltalk są tak podobne.
Z wyjątkiem jednej rzeczy: projektanci Erlanga nie wiedzieli o modelu aktorskim !!! Dowiedzieli się o tym dopiero później, zwłaszcza gdy pod koniec lat 90. Joe Armstrong napisał pracę doktorską pod kierownictwem Seifa Haridi (współautor ostatecznej książki o programowaniu paradygmatów).
Joe Armstrong napisał artykuł, w którym zdecydowanie opowiadał się przeciwko OO ( Dlaczego OO Sucks ), ale później zmienił zdanie, gdy zdał sobie sprawę, że Erlang jest bardzo zorientowany obiektowo. W rzeczywistości nawet posunął się do stwierdzenia, że Erlang jest jedynym językiem obiektowym w tym wywiadzie dla Joe Armstronga i Ralpha Johnsona .
Jest to interesujący przypadek tego, co biolodzy ewolucyjni nazwaliby ewolucją zbieżną , tj. Dwa niezwiązane gatunki ewoluują, by być podobne w odpowiedzi na podobne naciski zewnętrzne.
Nadal istnieje wiele relacji między Erlang a Smalltalk:
Erlang zaczynał jako rozszerzenie współbieżności z Prologiem (a nawet kiedy Erlang stał się własnym odrębnym językiem, pierwsze implementacje zostały napisane w Prologu) i do dziś jest mocno zakorzeniony w Prologu. Prolog jest pod silnym wpływem PLANERA Carla Hewitta.
Smalltalk był również pod silnym wpływem tego, co później stanie się ARPANet (a nawet później Internet); Erlang został zaprojektowany dla systemów sieciowych.
Jednak jedną z ważnych różnic między Erlangiem a Smalltalk jest to, że nie wszystko jest procesem. 1
jest liczbą, a nie procesem. Nie możesz wysłać wiadomości na numer.
Istnieje wiele „warstw” Erlanga:
- Funkcjonalny Erlang : najczęściej typowy, dynamicznie typowany język funkcjonalny z pewnymi „osobliwościami” odziedziczonymi po Prologu, np. Unifikacja.
- Współbieżne Erlang : funkcjonalne Erlang + procesy i komunikaty.
- Rozproszony Erlang : Równoczesne procesy Erlang + zdalne.
- Erlang odporny na błędy : rozproszony Erlang + niektóre wzorce projektowe skodyfikowane w bibliotekach OTP, np. Drzewa nadzorcze i
gen_server
.
System odporny na awarie napisany w języku Erlang / OTP zwykle będzie wyglądał jak coś, co możemy rozpoznać jako „obiektowe”. Ale wnętrza tych obiektów często będą implementowane w bardziej funkcjonalnym niż obiektowym stylu.
Co ciekawe, „presja ewolucyjna”, na którą znajdował się Erlang, innymi słowy, problem, który projektanci Erlang próbowali rozwiązać (niezawodność, replikacja, redundancja,…), to ta sama presja, która doprowadziła do ewolucji komórek. Alan Kay zajmował się mikrobiologią i wyraźnie modelował OO na komórkach biologicznych. To kolejna paralela między Erlangiem a Smalltalk.
Trochę o tym napisałem w innej mojej odpowiedzi .