Czy Erlang jest naprawdę językiem modelowym dla aktorów?

18

Czytałem ten artykuł:

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

I wspomina, że:

... w modelu aktorskim nawet liczba całkowita jest reprezentowana jako aktor ...

Wikipedia potwierdza:

Model aktora przyjmuje filozofię, że wszystko jest aktorem.

Erlang ma wiele typów danych i o ile wiem, typy te nie są aktorami.

Czy to nie znaczy, że Erlang nie jest językiem modelu aktorskiego w sposób, w jaki niektórzy twierdzą, że np. Java nie jest językiem funkcjonalnym tylko dlatego, że brakuje mu niektórych funkcjonalnych funkcji programowania?

PS: przez rozszerzenie oznacza to, że Akka zdecydowanie nie jest modelem aktora, ponieważ oprócz typów danych innych niż aktorzy pochodzących z języka hosta, pozwala on nawet dziedziczącym aktorom na rozszerzenie ich zachowania za pośrednictwem funkcji języka hosta.

Legowisko
źródło

Odpowiedzi:

39

Chociaż model aktora jest starszy od Erlanga, projektanci Erlanga dowiedzieli się o modelu aktora dopiero po zaprojektowaniu Erlanga, więc należy się spodziewać pewnych różnic.

Podążali równoległymi ścieżkami ewolucji: model aktora został stworzony przez Carla Hewitta na podstawie semantyki przekazu Smalltalk. Alan Kay z kolei oparł semantykę Smalltalk na przesłaniu opartej na celach ocenie PLANNERA, którą zaprojektował… Carl Hewitt.

PLANNER był prekursorem Prologa. Erlang pierwotnie nie miał być językiem, zaczął jako biblioteka dla odpornego na błędy programowania rozproszonego w Prologu, a później przekształcił się w dialekt języka Prolog, zanim stał się własnym językiem, do dziś pod silnym wpływem Prologu (plus oryginalny tłumacz Erlanga został napisany w Prologu).

Tak więc podobieństwa między procesami w Erlangu, obiektami w OO i aktorami w modelu aktorskim są dalekie od przypadkowych.

Erlang to język z kilkoma warstwami, z których każda jest nadzbiorem niższych warstw. Najmniejszą warstwą jest Functional Erlang . Jest to standardowy język funkcjonalny z pewnymi dodatkami odziedziczonymi po Prologu, takimi jak unifikacja zamiast wiązania / równości. Jeśli dodamy do tego Procesy i Wiadomości , otrzymamy Współbieżny Erlang . Rzuć zdalnymi procesami, a otrzymasz Distributed Erlang . Teraz dodaj kilka bibliotek i wzorców projektowych z OTP, a otrzymasz Erlang odporny na błędy.

Procesy są aktorami. (Są to także obiekty.) Wnętrze procesów jest funkcjonalne, a nie oparte na aktorach. Struktura dużego, odpornego na uszkodzenia systemu Erlang, zbudowanego przy użyciu narzędzi i wzorów OTP, jest często bardzo zorientowana obiektowo.

To zależy od skali, na którą patrzysz.

W typowym dużym systemie Erlang masz architekturę obiektową z aktorami przekazującymi wiadomości zaimplementowanymi za pomocą programowania funkcjonalnego. To, co OTP nazywa, serverjest ściśle związane z obiektem, serverponieważ składają się z procesów (które są aktorami), procesy wykorzystują funkcje wewnętrznie.

Ogólnie rzecz biorąc, nie sądzę, aby jakikolwiek czysty język aktorski kiedykolwiek opuścił badania. Cholera, nawet nie wiem, czy PLASMA Carla Hewitta, oryginalny język aktorów, została kiedykolwiek wdrożona.

Jörg W Mittag
źródło
4
Erlang został również zaprojektowany przez osoby, które mają problem do rozwiązania, a kiedy jesteś w tej pozycji, konceptualna czystość jest często poświęcana na ołtarzu praktyczności.
Blrfl,
Co ciekawe, problem, który próbowali rozwiązać (niezawodność, replikacja, redundancja,…) jest taki sam, jak natura, którą próbowali rozwiązać, gdy ewoluowały komórki. Alan Kay zajmował się mikrobiologią i wyraźnie modelował OO na komórkach biologicznych. Kolejna równoległość.
Jörg W Mittag
1
PLASMA została zaimplementowana w MacLisp. Był to szybko ewoluujący język badawczy.
Jerry101
1
Naprawdę podobała mi się ta odpowiedź. Dziękuję @ JörgWMittag!
Felixyz