7

これは他の人が見たことのある質問かもしれませんが、.net プラットフォームで実行できる並行プログラミング用に設計された (または言語をサポートする) 言語を見つけようとしています。

私は erlang のサイド開発を行って言語の感触をつかみましたが、安定した並行システムや分散システムを簡単に起動できることを気に入っています。アクターを使用した優れたシステムも備えたscalaにたどり着きましたが、現在scala.netにはこの機能がないようです(これは並行システムと分散システムであることを認めます)。私が調べていた 2 つの .net 言語は、Axum と F# です。

これらは私が持っている唯一の選択肢ですか?他にもありますか?そして、それらが唯一の選択肢である場合、それぞれの利点/欠点は何ですか?

4

4 に答える 4

6

Axum は研究プロジェクトです。そこからのアイデアだけが製品につながる、本当の研究プロジェクト。(全体として製品化された F# とは異なります。) ライセンスで、それを使用して運用アプリケーションを開発することが許可されているかどうかさえわかりません。

F# は良い選択です。

Clojure は CLI でも実行できるので、これも良い選択です。

Scala の CLI ポートは現在復活の過程にあり (実際には Microsoft からの公式の資金提供を受けています)、Scala の Actor ライブラリ (組み込みのものと Akka の両方) はかなり優れています。

上記の @wmeyer のコメントについて: Scala 自体には、分散プログラミングの規定はありません。(Clojure もそうではありません。) どちらも通常、その目的のために存在する無数の Java フレームワーク (Terracotta など) に依存しています。ただし、Akkaに分散プログラミング用のリモート アクターがあり、Akka は組み込みの Scala アクター ライブラリとほぼ API 互換であるため、スムーズな移行が可能です。

Erlang はちょっとクールです。Kresten Krab Thorup は現在、JVM での Erlang 実装である Erjang に取り組んでおり、かなり印象的な結果をいくつか出しています。たとえば、10000 プロセスの (悪名高い) プロセス リング ベンチマークでは、Erjang の起動は BEAM よりもわずかに遅いだけですが、実行を数回繰り返して JIT が作動すると、約 3 回の実行後に BEAM を追い越します (そして不思議なことに) 、BEAM は 4 回実行すると減速し始めます)。

DLR と TPL で同等に機能する「#rlang」を構築できると確信しています。

于 2010-09-23T03:42:28.610 に答える
3

私は現在、並行プログラミングと分散プログラミングの両方を行うために F# を使用しています。とてもうまくいっていると思います。Union 型を使用すると、静的に型指定されたメッセージを簡単に定義できます。.NET シリアライゼーションは遅すぎますが、カスタム パーサーとアンパーサー コンビネーターを使用して置き換えるのは簡単で、パフォーマンスは十分に向上しています。非同期ワークフローとメールボックス プロセッサにより、メッセージの受け渡しが簡単になります。型推論とは、コード ベース全体が小さく、保守が容易であることを意味します。

于 2010-09-23T12:45:31.583 に答える
2

JörgはすでにAxumについてのあなたの質問に答えていると思います(そして私はそれについてあまり知りません)ので、F#についていくつか追加します-注意すべきことの1つは、F#は実際には並行言語ではないということです。並列開発を行うための優れたライブラリがあります。最も注目すべきオプションは次のとおりです。

  • タスク並列ライブラリPLINQはC#でも使用できますが、特に不変のデータ型を使用する場合は、F#で少し見栄えが良くなる可能性があります。.NETを使用した並列プログラミングでこれら2つを使用するF#の優れた例がいくつかあり、F#バージョンに関するブログ投稿を作成しました。

  • 非同期ワークフローは、基本的に並行プログラミング用に設計されていません。一般に非ブロッキングコードを記述でき(並行プログラミングで非常に役立ちます)、開始および管理できる計算を記述できます。あなたはそれらを以下のために使うことができます:

    • StartChildメソッドを使用したタスクベースの並列処理(タスク並列ライブラリに少し似ています)
    • Async.Parallel
      _を使用したデータ並列計算
  • F#の型を使用したエージェントベースのプログラミングMailboxProcessorでは、Erlangと非常によく似たメッセージパッシングの同時実行性を使用できます。これは非同期ワークフローに基づいており、いくつかの利点があります(たとえば、メッセージの待機は非ブロッキングです)。

要約すると、タスクに適切な並列プログラミングモデルを選択することは、それをエンコードするために使用される言語よりも重要だと思います。言語がプログラミングモデルをエンコードするのに十分な能力を備えている限りです。この場合、プログラミングモデルは言語よりもあなたの心を形作ります。Axumはアクター(メッセージパッシング)モデルに基づいているため、少し努力すれば、F#エージェントをラップしてAxumAPIと非常によく似たものにすることができると思います。

于 2010-09-23T22:47:11.977 に答える
0

.NET 4.5 以降、C# async/await を使用できます。async/await を使用して、スレッドセーフなアクター ベースの設計について説明しようとしました。AsyncWcfLibは、並行システムまたは分散システムを作成するときに役立つことを目的としています。

于 2012-11-28T23:04:45.737 に答える