В чем разница между процессами / сообщениями в Erlang и объектами / сообщениями в Smalltalk?

12

Я пытаюсь понять разницу между объектами / сообщениями в Smalltalk и процессами / сообщениями в Erlang . Я прочитал следующий пост по теме .

Насколько я понимаю, в Smalltalk все является объектом , и все имеют одну и ту же абстракцию «объект / сообщение» - даже число 1- это объект, который может быть достигнут только при передаче сообщения. Является ли 1процесс в Erlang / эликсира? Является ли все в Erlang ответом на парадигму сообщения / программы? Можете ли вы отправить сообщение на номер в Erlang?

Большое спасибо.

Полностью работоспособный
источник
Целое число 1 не является процессом, поэтому вы не можете отправить ему сообщение. Вы можете обернуть состояние целого числа внутри рекуррентного процесса и отправить сообщения этого процесса - например, инструкцию увеличить или уменьшить его значение. Но опять же, он больше не будет иметь значения 1. Прокрутите вниз до примера с Elixir. Dantswain.herokuapp.com/blog/2015/01/06/…
GavinBrelstaff
спасибо за ответ!
Полнофункциональный

Ответы:

18

Процессы в Erlang и Objects в Smalltalk - это действительно одно и то же.

На первый взгляд, это неудивительно: Эрланг - это язык актерской модели . Модель актера была изобретена Карлом Хьюиттом, который основал модель оценки, основанную на сообщениях, на модели оценки, управляемой сообщениями Smalltalk. (Действительно, актеры и объекты - это одно и то же; они отличаются только некоторыми деталями.) Алан Кей, в свою очередь, находился под влиянием ПЛАНЕРА Карла Хьюитта, когда он разрабатывал Smalltalk.

Таким образом, между актерами и объектами существует тесная связь, и поэтому неудивительно, что процессы Эрланга и объекты Smalltalk так похожи.

За исключением одного: дизайнеры Эрланга не знали об актерской модели !!! Они узнали об этом позже, особенно когда Джо Армстронг написал свою кандидатскую диссертацию под руководством Сейфа Хариди (соавтор окончательной книги по парадигмам программирования) в конце 1990-х годов.

Джо Армстронг написал статью, в которой он решительно выступал против ОО ( почему О.О. отстой ), но позже он передумал, когда понял, что Эрланг на самом деле очень объектно-ориентирован. Фактически, он даже зашел так далеко, что заявил, что Erlang - единственный объектно-ориентированный язык в этом интервью с Джо Армстронгом и Ральфом Джонсоном .

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

Тем не менее, между Erlang и Smalltalk еще много отношений:

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

На Smalltalk также сильно повлияло то, что позже станет ARPANet (и даже позже Интернет); Erlang был разработан для сетевых систем.

Однако одно из важных отличий между Erlang и Smalltalk заключается в том, что не все является процессом. 1это число, а не процесс. Вы не можете отправить сообщение на номер.

Есть несколько «слоев» Эрланга:

  • Функциональный Erlang : в основном типичный, динамически типизированный функциональный язык с некоторыми «странностями», унаследованными от Prolog, например, объединением.
  • Параллельный Erlang : Функциональный Erlang + Процессы и Сообщения.
  • Распределенный Erlang : параллельный Erlang + удаленные процессы.
  • Отказоустойчивый Erlang : распределенный Erlang + определенные шаблоны проектирования, кодифицированные в библиотеках OTP, например, деревья супервизора и gen_server.

Отказоустойчивая система, написанная на Erlang / OTP, обычно выглядит как нечто, что мы могли бы признать «объектно-ориентированным». Но внутренности этих объектов часто будут реализованы в более функциональном, чем объектно-ориентированный стиль.

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

Я написал немного об этом в другом моем ответе .

Йорг Миттаг
источник
Спасибо, это полезно!
Полностьюфункциональный