В чем разница между процессами / сообщениями в Erlang и объектами / сообщениями в Smalltalk? - PullRequest
10 голосов
/ 27 октября 2019

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

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

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

1 Ответ

14 голосов
/ 27 октября 2019

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

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

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

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

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

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

Есть еще многооб отношениях между Erlang и Smalltalk, хотя:

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

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

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

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

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

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

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

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

...