ErlangのプロセスとSmalltalkのオブジェクトは実際に同じものです。
一見すると、これはそれほど驚くべきことではありません。ErlangはActor Model言語です。Actor Modelは、Smalltalkのメッセージ駆動型評価モデルに基づいてメッセージ駆動型評価モデルを作成したカールヒューイットによって発明されました。(実際には、俳優とオブジェクトは同じものです。細かい点でのみ異なります。)アランケイは、カールヒューイットのプランナーの影響を受け、スモールトークを設計しました。
したがって、アクターとオブジェクトの間には密接な関係があり、したがって、ErlangのプロセスとSmalltalkのオブジェクトが非常に似ていることは驚くに値しません。
1つを除いて、Erlangの設計者はアクターモデルについて知りませんでした !!! 特にジョーアームストロングが1990年代後半にSeif Haridi(プログラミングパラダイムに関する決定的な本の共著者)のもとで博士論文を執筆したときに、彼らはそれについて後でしか知りませんでした。
Joe Armstrongは、OO(Woo OO Sucks)を強く支持する記事を書きましたが、後にErlangが実際には非常にオブジェクト指向であることに気付いたとき、彼は気が変わりました。実際、彼は、ジョーアームストロングとラルフジョンソンへのインタビューで、Erlangが唯一のオブジェクト指向言語であると主張することさえしました。
これは、進化生物学者が収束進化と呼んでいる興味深い事例です。つまり、2つの無関係な種が、類似の外部圧力に反応して類似に進化します。
ただし、ErlangとSmalltalkの間にはまだ多くの関係があります。
ErlangはPrologの同時実行拡張機能として始まり(Erlangが独自の独立言語になったときでさえ、最初の実装はPrologで書かれました)、今日までPrologに根ざしています。プロローグは、カールヒューイットのプランナーの影響を強く受けています。
Smalltalkは、後にARPANet(さらには後でインターネット)になるものにも大きく影響されました。Erlangはネットワークシステム用に設計されました。
ただし、ErlangとSmalltalkの重要な違いの1つは、すべてがプロセスであるとは限らないことです。1
プロセスではなく数値です。番号にメッセージを送信することはできません。
Erlangには複数の「レイヤー」があります。
- 関数型アーラン:ほとんどが典型的な、動的に型付けされた関数型言語で、Prologから継承された「奇妙さ」がいくつかあります(例:統一)。
- 同時アーラン:機能アーラン+プロセスとメッセージ。
- 分散アーラン:並行アーラン+リモートプロセス。
- フォールトトレラントErlang:分散Erlang + OTPライブラリで成文化された特定のデザインパターン(スーパーバイザーツリーなど)
gen_server
。
Erlang / OTPで作成されたフォールトトレラントシステムは、通常、「オブジェクト指向」として認識されるもののように見えます。しかし、これらのオブジェクトの内部は、多くの場合、オブジェクト指向のスタイルよりも機能的に実装されます。
興味深いことに、Erlangが抱えていた「進化の圧力」、つまり、Erlangの設計者が解決しようとしていた問題(信頼性、複製、冗長性など)は、セルの進化につながったのと同じ圧力です。アラン・ケイは微生物学を専攻し、生物学的細胞でオブジェクト指向を明示的にモデル化しました。これは、ErlangとSmalltalkのもう1つの類似点です。
私は私の別の答えでこれについて少し書いた。