アーランスタイルの並行性モデル(プロセス、メールボックス、パターンマッチング受信など)を提供するために、他のプログラミング言語用にどのライブラリが存在しますか?
注:スレッドライブラリやキューイングライブラリだけでなく、Erlangに類似することを目的としたものに特に興味があります。
アーランスタイルの並行性モデル(プロセス、メールボックス、パターンマッチング受信など)を提供するために、他のプログラミング言語用にどのライブラリが存在しますか?
注:スレッドライブラリやキューイングライブラリだけでなく、Erlangに類似することを目的としたものに特に興味があります。
Ulf Wigerは最近、このトピックについてすばらしい投稿をしました。「Erlangスタイルの同時実行性」と呼ぶ前に、彼が必要に応じて定義したプロパティは次のとおりです。
上記の2番目は、最初は同時実行用に設計されていなかったVMおよび言語実装でサポートするのが最も困難です。これは他の言語でのErlang風の並行性実装をノックすることではありませんが、Erlangの価値の多くは、何百万ものプロセスを作成できることから得られます。これは、プロセスの抽象化がOSレベルと1対1の関係にある場合はかなり困難です。スレッドまたはプロセス。Ulfは、上記のリンクでこれについてさらに多くのことを説明しています。
Microsoft Concurrency and Coordination Runtimefor.NET。
CCRは、コンポーネントをメッセージを介してのみ対話できる部分に分割するアプリケーションモデルに適しています。このモデルのコンポーネントには、メッセージ間で調整し、複雑な障害シナリオに対処し、非同期プログラミングに効果的に対処する手段が必要です。
Scala はアクターをサポートしています。しかし、私は scala を意図的に Erlang と同じように呼ぶつもりはありません。
とはいえ、scala は一見の価値があります。
Message Passing Interface (MPI) ( http://www-unix.mcs.anl.gov/mpi/ ) は、並列プログラミング用の高度にスケーラブルで堅牢なライブラリであり、元は C 向けでしたが、現在はいくつかのフレーバーで利用できますhttp://en .wikipedia.org/wiki/Message_Passing_Interface#Implementations . このライブラリは新しい構文を導入していませんが、並列化可能なルーチン間のデータ共有を調整するための通信プロトコルを提供します。
マルチコア システムでもこのライブラリを確実に活用できますが、伝統的に、同時実行のために単一のシステムではなく、大規模なクラスター コンピューティングで使用されます。
並列プログラミングの問題に対するもう 1 つの興味深い解決策は OpenMP です。これは、コードのどのセクションが簡単に並列化できるかについてコンパイラーにヒントを提供するために、さまざまなプラットフォームで移植可能な拡張機能を提供しようとする試みです。
例 ( http://en.wikipedia.org/wiki/OpenMP#Work-sharing_constructs ):
#define N 100000
int main(int argc, char *argv[])
{
int i, a[N];
#pragma omp parallel for
for (i=0;i<N;i++)
a[i]= 2*i;
return 0;
}
もちろん、どちらにも長所と短所がありますが、前者は学界やその他の重い科学計算アプリケーションで非常に成功していることが証明されています。YMMV。
また、 kilimは Java 用のライブラリであり、erlang スタイルのメッセージ パッシング/アクターを Java 言語にもたらします。
Mike Rettig は、Retlang と呼ばれる .NET ライブラリと、 Erlang の同時実行モデルに触発された Jetlang と呼ばれる Java ポートを作成しました。
Microsoft の Erlang に対する製品版ではない回答: Microsoft Axum
ガンビットスキームのシロアリ。
Ruby を使用している場合は、Revactor を参照してください: [ http://revactor.org/][1]
Revactor は、Rev 高性能イベント ライブラリの上に構築された Ruby 1.9 の Actor モデル実装です。Revactor は主に、Erlang のようなネットワーク サービスとツールを作成するために設計されています。
このコード サンプルを見てください。
myactor = Actor.spawn do
Actor.receive do |filter|
filter.when(:dog) { puts "I got a dog!" }
end
end
Revactor は Ruby 1.9 でのみ動作します。ライブラリの作成者はメンテナンスを中止したと思いますが、サイトのドキュメントは非常に優れています。
また、Erlang VM の上に構築された Ruby に似たスクリプト言語である Reia も参照してください。Reia は、Revactor の作成者である Tony Arcieri の新しいプロジェクトです。
Python の場合は、処理モジュールを使用して試すことができます。
Akka ( http://akka.io ) は erlangs OTP の影響を強く受けています。これは scala のアクターに基づいて構築されており、JVM での並行性に優れています。