4

私は scala で比較的大きなプロジェクトを終えたばかりで、すぐに別の関連プロジェクトを開始する予定です。

まだ言語を選択していませんが、相互運用性の問題よりも、言語の機能や利用可能なライブラリに基づいて決定したいと考えています。

そして、これがこれを尋ねる理由です。

私の要件は次のとおりです(上がより重要です):

  1. さまざまなプログラミング言語/プラットフォーム間の相互運用性 (おそらく JVM、Haskell、Python、C/C++)
  2. プロトタイプ/リファクタリングが容易
  3. プログラミングが簡単
  4. 私の側の最適化をあまり気にせずにパフォーマンスを向上させます(これにより、ファイルの使用が除外される場合があります)
4

4 に答える 4

5

さまざまな言語で記述され、さまざまなプラットフォームに配布されているプログラム間で通信する最も簡単な方法の 1 つは、メッセージ パッシングライブラリを使用することです。

ZeroMQ は、そのシンプルさ、速度、および多数の言語のバインディングの可用性により、私のお気に入りの 1 つです: http://www.zeromq.org/bindings:_start

また、ActiveMQ、RabbitMQ など、複数の言語でバインドされているものを使用することもできます。

于 2012-04-05T11:44:33.333 に答える
2

特に受信者が不在のときにライブラリが配信を延期する場合は、メッセージパッシングに+1します。メッセージングを使用する場合は、メッセージングプロトコルを定義する必要があります。1つの良い選択は、その名前にもかかわらず、HTTPに基づくステートレスなメッセージベースの対話プロトコルであるRepresentational State Transfer (ReST)です。非常に注意深いAPI定義が必要です。これは、それ自体が非常に優れたものです。

これがお役に立てば幸いです。

于 2012-04-05T11:53:13.883 に答える
2

方法はたくさんありますが、主に3つのオプションに分けられます。

  1. ある種の集中型通信ノード(メッセージキュー、Key-Valueストア、データベースなど)を使用します。
  2. クロスプラットフォームの分散オブジェクトテクノロジー(CORBAなど)。
  3. コンポーネント間で直接、好きなWebサービスアプローチを使用するHTTP(ただし、ほとんどの人は、さまざまな種類の安らかなWebサービスのようにEnterprise Borgによって洗脳されていません)。

私は2を無視します(それは決して簡単ではありません)。

1に関しては、データベースは通常、偽のメッセージパッシングプラットフォームとして使用されるべきではないことに注意してください。これは、実際にデータセットの保存がすべてである場合にのみ使用してください。http://redis.ioはメッセージキューであり、Key-Valueストアであることに注意してください。

于 2012-04-05T11:53:32.633 に答える
2

私はほぼすべての通信をRedis経由で行っています。Redisを使用すると、驚くほど簡単に言語間でデータを正確かつ迅速に移動できます。Pythonでこれを実行できるようにする単純なキー/ストアデータベース

import redis
r = redis.Redis()
r.set("a", 33)

そして、Java のほぼ同じコード (Java は冗長であるため、大規模な初期化を除く)

r.get("a"); // in java
于 2012-04-05T11:45:09.763 に答える