アクターモデルについてはそれほど重要ではなく、C++でOTPに類似したものを適切に作成することがどれほど難しいかについてははるかに重要です。また、オペレーティングシステムが異なれば、デバッグとシステムツールも根本的に異なり、ErlangのVMといくつかの言語構造は、これらすべてのプロセスが何をしているのかを統一的に把握するための統一された方法をサポートします。まったく)いくつかのプラットフォーム間で。(Erlang / OTPは「アクターモデル」という用語よりも現在の話題よりも前のものであるため、この種の議論ではリンゴとテロダクティルスを比較している場合があります。優れたアイデアは独立した発明になりがちです。)
これはすべて、確かに別の言語で「アクターモデル」プログラムスイートを作成できることを意味します(私は、Erlangに遭遇する前に、Python、C、Guileで長い間これを行ってきましたが、モニターとリンク、そして「アクターモデル」という用語を聞く前に)、コードが実際にどのように生成されるか、そしてそれらの間で何が起こっているかを理解する非常に難しいです。Erlangは、OSがカーネルの大規模なオーバーホールなしでは不可能であるというルールを適用します。カーネルのオーバーホールは、おそらく全体的には有益ではないでしょう。これらのルールは、プログラマーに対する一般的な制限(本当に必要な場合は常に回避できます)と、システムがプログラマーに保証する基本的な約束(本当に必要な場合は意図的に破ることができます)の両方として現れます。
たとえば、副作用からユーザーを保護するために、2つのプロセスが状態を共有できないように強制します。これは、すべてが参照透過性であるという意味ですべての関数が「純粋」でなければならないことを意味するのではなく(明らかに、プログラムの多くを参照透過性にすることは、ほとんどのErlangプロジェクトの明確な設計目標ですが)、2つです。プロセスは、共有状態または競合に関連する競合状態を常に作成しているわけではありません。(ちなみに、これはアーランの文脈での「副作用」の意味です。ハスケルやおもちゃの「純粋な」言語と比較した場合、アーランが「本当に機能するかどうか」を問う議論の一部を解読するのに役立つかもしれません。 。)
一方、Erlangランタイムはメッセージの配信を保証します。これは、管理されていないポート、パイプ、共有メモリ、およびOSカーネルだけが管理している共通ファイルを介して純粋に通信する必要がある環境では非常に見逃されています(これらのリソースのOSカーネル管理は、Erlangに比べて必然的に非常に最小限です)ランタイムが提供します)。これは、ErlangがRPCを保証することを意味するものではなく(とにかく、メッセージパッシングはRPCでも、メソッド呼び出しでもありません!)、メッセージが正しくアドレス指定されることを保証するものではなく、プロセスが正しいことを保証するものでもありません。にメッセージを送信しようとすると、存在するか、生きています。あなたが送ったものがその瞬間にたまたま有効であるならば、それはただ配達を保証します。
この約束に基づいて構築されているのは、モニターとリンクが正確であるという約束です。そして、それに基づいて、Erlangランタイムは、システムで何が起こっているのか(そしてerl_connectの使用方法...)を理解すると、「ネットワーククラスター」の概念全体を溶かしてしまいます。これにより、トリッキーな並行性のケースのセットをすでに乗り越えることができます。これにより、裸の並行プログラミングに必要な防御技術の沼地に夢中になるのではなく、成功したケースのコーディングに大きな一歩を踏み出すことができます。
つまり、言語であるErlangが必要なわけではなく、ランタイムとOTPがすでに存在し、かなりクリーンな方法で表現され、それに近いものを別の言語で実装するのは非常に困難です。OTPは従うのが難しい行為です。同様に、C ++も実際には必要ありません。生のバイナリ入力、Brainfuckに固執し、Assemblerを高級言語と見なすことができます。また、私たちは皆、歩き方や泳ぎ方を知っているので、電車や船は必要ありません。
とはいえ、VMのバイトコードは十分に文書化されており、VMにコンパイルしたり、Erlangランタイムで動作したりする代替言語がいくつか登場しています。質問を言語/構文の部分(「並行性を実現するにはMoon Runesを理解する必要がありますか?」)とプラットフォームの部分(「OTPは並行性を実現するための最も成熟した方法であり、最も難しい方法を案内してくれますか?」)に分けます。 、並行分散環境で見つかる最も一般的な落とし穴? ")、答えは(" no "、" yes ")です。