Erlangは本当にアクターモデル言語ですか?


18

私はこの記事を読んでいた:

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

そして、それはそれについて言及しています:

...アクターモデルでは整数もアクターとして表されます...

ウィキペディアは以下を確認します:

アクターモデルは、すべてがアクターであるという哲学を採用しています。

Erlangには多くのデータ型があり、私が知る限り、それらの型はアクターではありません。

たとえば、Javaは特定の機能的なプログラミング機能が欠けているという理由だけでJavaは機能言語ではないと言う人がいるという意味で、Erlangはアクターモデル言語ではないということではありませんか?

PS:拡張により、Akkaは間違いなくアクターモデルではないことを意味します。これは、ホスト言語からの非アクターデータ型に加えて、ホスト言語機能を介してアクターの継承を可能にするためです。

回答:


39

Actor ModelはErlangよりも古いですが、Erlangの設計者はErlangを設計した後にのみActor Modelについて学んだため、いくつかの違いが予想されます。

しかし、それらは進化の並行した道をたどりました。アクターモデルは、Smalltalkのメッセージパッシングセマンティクスに基づいてCarl Hewittによって作成されました。Alan Kayは、Smalltalkのメッセージパッシングセマンティクスに基づいて、…Carl Hewittによって設計されたPLANNERの目標駆動型評価に基づいていました。

PLANNERはPrologの前身でした。Erlangはもともと言語を目的としていませんでしたが、Prologのフォールトトレラントな分散プログラミングのライブラリとして始まり、その後Prologの方言に発展しました。 (さらに、元のErlangインタープリターはPrologで作成されました)。

したがって、Erlangのプロセス、OOのオブジェクト、およびアクターモデルのアクター間の類似性は、偶然とはほど遠いものです。

Erlangは複数のレイヤーを持つ言語で、それぞれが下位レイヤーのスーパーセットです。最小のレイヤーはFunctional Erlangです。これは標準の関数型言語であり、バインディング/平等ではなく統合など、Prologから継承された追加機能があります。プロセスメッセージを追加すると、Concurrent Erlangが得られます。リモートプロセスを投入すると、Distributed Erlangが得られます。OTPからライブラリとデザインパターンをいくつか追加すると、フォールトトレラントなErlangができました。

プロセスはアクターです。(これらもオブジェクトです。)プロセスの内部は機能的であり、アクターベースではありません。OTPのツールとパターンを使用して構築された大規模なフォールトトレラントアーランシステムの構造は、多くの場合非常にオブジェクト指向です。

だから、それはあなたが見ているスケールに依存します。

典型的な大規模なErlangシステムでは、関数型プログラミングを使用して実装されたメッセージパッシングアクターを備えたオブジェクト指向アーキテクチャがあります。OTPと呼ばれるものserverはオブジェクトと密接に関連しています。sはserverプロセス(アクター)で構成され、プロセスは内部で関数を使用します。

一般的に、純粋なアクター言語が研究を残したことはないと思います。ヘック、元のアクター言語であるカールヒューイットのPLASMA が実装されたことさえありません。


4
Erlangはまた、解決すべき問題を抱える人々によって設計されており、その立場にいるとき、実用性の祭壇で概念的な純粋さが犠牲になることがよくあります。
Blrfl

興味深いことに、彼らが解決しようとしていた問題(信頼性、複製、冗長性など)は、セルが進化したときに解決しようとしていたのと同じ性質です。アランケイは微生物学をマイナーで、生物細胞のオブジェクト指向を明示的にモデル化しました。別の平行。
ヨルグWミットタグ

1
PLASMAはMacLispに実装されました。それは急速に進化する研究言語でした。
Jerry101

1
本当にこの答えを楽しんだ。@JörgWMittagありがとうございます!
フェリキシー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.