Процессы в 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.
Я написал немного об этом в другом моем ответе .