Эрланг действительно язык актерской модели?


18

Я читал эту статью:

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

И упоминается, что:

... в модели актера даже целое число представлено как актер ...

Википедия подтверждает:

Модель Актер принимает философию, что все является актером.

Эрланг имеет много типов данных, и, насколько я могу судить, эти типы не являются действующими лицами.

Разве это не означает, что Эрланг не является языком актерской модели в том смысле, как некоторые люди говорят, что, например, Java не является функциональным языком только потому, что в нем отсутствуют определенные функциональные возможности программирования?

PS: под расширением это означает, что Akka определенно не является актерской моделью, потому что в дополнение к неакторным типам данных, исходящим из основного языка, он даже позволяет наследующим акторам расширять свое поведение с помощью средств основного языка.

Ответы:


39

Хотя модель актера старше, чем Erlang, дизайнеры Erlang узнали о модели актера только после того, как разработали Erlang, поэтому следует ожидать некоторых отличий.

Однако они следовали параллельным путям эволюции: модель актера была создана Карлом Хьюиттом на основе семантики передачи сообщений Smalltalk. Алан Кей, в свою очередь, основывал семантику передачи сообщений Smalltalk на целенаправленной оценке PLANNER, которая была разработана ... Карлом Хьюиттом.

ПЛАНЕР был предшественником Пролога. Изначально Erlang не был задуман как язык, скорее он начинался как библиотека для отказоустойчивого распределенного программирования на Прологе, а затем превратился в диалект Пролога, прежде чем стал собственным языком, до сих пор находящимся под сильным влиянием Пролога. (плюс, оригинальный переводчик Erlang был написан на Прологе).

Таким образом, сходство между процессами в Erlang, объектами в OO и актерами в модели акторов далеко не случайно.

Erlang - это язык с несколькими слоями, каждый из которых является надмножеством нижних уровней. Самый маленький слой - Функциональный Эрланг . Это стандартный функциональный язык с некоторыми дополнениями, унаследованными от Prolog, такими как объединение вместо связывания / равенства. Если мы добавим к этому процессы и сообщения , мы получим параллельный Erlang . Добавьте удаленные процессы, и вы получите Distributed Erlang . Теперь добавьте некоторые библиотеки и шаблоны проектирования из OTP, и вы получите отказоустойчивый Erlang.

Процессы являются актерами. (Они также являются объектами.) Внутри процессов функционирует, а не на основе акторов. Структура большой отказоустойчивой системы Erlang, построенной с использованием инструментов и шаблонов OTP, часто очень объектно-ориентирована.

Таким образом, это зависит от того, на какой масштаб вы смотрите.

В типичной большой системе Erlang у вас есть объектно-ориентированная архитектура с субъектами передачи сообщений, реализованными с использованием функционального программирования. То, что OTP называет a server, тесно связано с объектом, servers состоят из процессов (которые являются действующими лицами), процессы используют функции внутренне.

В общем, я не верю, что какой-либо чистый язык актеров когда-либо оставлял исследования. Черт возьми, я даже не знаю, был ли когда-либо реализован PLASMA Карла Хьюитта, оригинальный язык актера.


4
Erlang также был разработан людьми, которые должны решить проблему, и когда вы находитесь в таком положении, концептуальная чистота часто жертвуется на алтаре практичности.
Blrfl

Интересно, что проблема, которую они пытались решить (надежность, репликация, избыточность и т. Д.), - та же природа, которую пытались решить, когда эволюционировали клетки. Алан Кей изучал микробиологию и явно моделировал ОО на биологических клетках. Еще одна параллель.
Йорг Миттаг

1
PLASMA была реализована в MacLisp. Это был быстро развивающийся язык исследований.
Jerry101

1
Очень понравился этот ответ. Спасибо @ JörgWMittag!
Феликсиз,
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.