21

アーランスタイルの並行性モデル(プロセス、メールボックス、パターンマッチング受信など)を提供するために、他のプログラミング言語用にどのライブラリが存在しますか?

注:スレッドライブラリやキューイングライブラリだけでなく、Erlangに類似することを目的としたものに特に興味があります。

4

13 に答える 13

15

Ulf Wigerは最近、このトピックについてすばらしい投稿をしました。「Erlangスタイルの同時実行性」と呼ぶ前に、彼が必要に応じて定義したプロパティは次のとおりです。

  • 迅速なプロセスの作成/破棄
  • 特性がほとんど変わらない>>10000の並行プロセスをサポートする機能。
  • 高速非同期メッセージパッシング。
  • メッセージパッシングセマンティクスのコピー(シェアードナッシングコンカレンシー)。
  • プロセス監視。
  • 選択的なメッセージ受信。

上記の2番目は、最初は同時実行用に設計されていなかったVMおよび言語実装でサポートするのが最も困難です。これは他の言語でのErlang風の並行性実装をノックすることではありませんが、Erlangの価値の多くは、何百万ものプロセスを作成できることから得られます。これは、プロセスの抽象化がOSレベルと1対1の関係にある場合はかなり困難です。スレッドまたはプロセス。Ulfは、上記のリンクでこれについてさらに多くのことを説明しています。

于 2008-09-10T15:40:53.913 に答える
7

Microsoft Concurrency and Coordination Runtimefor.NET

CCRは、コンポーネントをメッセージを介してのみ対話できる部分に分割するアプリケーションモデルに適しています。このモデルのコンポーネントには、メッセージ間で調整し、複雑な障害シナリオに対処し、非同期プログラミングに効果的に対処する手段が必要です。

于 2008-08-22T12:27:27.907 に答える
7

Scala はアクターをサポートしています。しかし、私は scala を意図的に Erlang と同じように呼ぶつもりはありません。

とはいえ、scala は一見の価値があります。

于 2008-08-22T12:45:04.523 に答える
7

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。

于 2008-08-22T13:08:51.863 に答える
6

また、 kilimは Java 用のライブラリであり、erlang スタイルのメッセージ パッシング/アクターを Java 言語にもたらします。

于 2008-08-22T12:46:57.500 に答える
6

Mike Rettig は、Retlang と呼ばれる .NET ライブラリと Erlang の同時実行モデルに触発された Jetlang と呼ばれる Java ポートを作成しました。

于 2008-08-22T14:15:46.303 に答える
5

Microsoft の Erlang に対する製品版ではない回答: Microsoft Axum

于 2009-06-09T16:40:23.953 に答える
4

ガンビットスキームのシロアリ。

于 2008-11-08T03:37:46.727 に答える
4

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 の新しいプロジェクトです。

于 2009-06-09T16:29:40.433 に答える
3

警告: 恥知らずなプラグイン!

Haskell でこの種のメッセージ パッシング用のライブラリを開発しました: Erlang-style Distributed Haskell

フォルカー

于 2009-02-02T06:10:38.867 に答える
3

Python の場合は、処理モジュールを使用して試すことができます。

于 2008-08-22T14:13:05.890 に答える
2

Akka ( http://akka.io ) は erlangs OTP の影響を強く受けています。これは scala のアクターに基づいて構築されており、JVM での並行性に優れています。

于 2011-10-07T21:26:07.093 に答える