9

私は、コンポーネント ベースのプログラミング (COM、別のシステム、または単純な C++ のパラダイムを使用するもの) に夢中になっています。「伝統的な」OOPモデルに通常慣れている場合は、少し慣れる必要がありますが、それだけの価値はあります。コードの保守性と拡張性が向上しました。

私が現在取り組んでいるプロジェクトは、パラダイムを使用していますが、セットのシステムはありません。ただし、次の要件で使用できる何らかのシステムを見つけたいと思っています。現在使用しているシステムから新しいシステムに切り替えるには少し時間がかかりますが、後でその時間を何倍も節約できます。

要求事項:

  1. クロスプラットフォーム
  2. 速い
  3. C++ でうまく動作する
  4. プロセス間のマーシャリングをサポート

これらの要件について詳しく説明しましょう。

クロスプラットフォーム

基本的に、Windows と Mac で動作する必要があります。Linux は便利ですが、必須ではありません。また、すべてのプラットフォームの他の要件を満たす必要があります。Mac 用の COM があります。これは理想的ですが、要件 4 をサポートしていません。さらに、GCC と MSVC の両方をサポートする必要があります。

速い

CORBA は他の 3 つの要件を満たしていますが、残念ながらここで不利になります。一部のルーチンはオーディオ割り込みからも呼び出される可能性があるため、インプロセス メソッド呼び出しは (理想的には COM のように) できるだけ高速である必要があります。

C++ でうまく動作する

...これはほとんど明らかだと思います。コンポーネントを実装するために C++ クラスを使用しなくてもかまいませんが、それは間違いなく役に立ちます。また、最終的にはサードパーティの拡張機能用の API をリリースする予定であるため、代替手段は依然として使いやすいものでなければなりません。

プロセス間のマーシャリングをサポート

つまり、少なくとも呼び出しをシリアル化できるということです。これが IDL から生成されたコードを介して行われる場合、それは私にとってまったく問題ありません。また、クロスプロセス通信自体を実装することも気にしません。

COM は優れていますが、要件 1 を完全には満たしていません。CORBA も優れていますが、要件 2 を満たしていません (最速の ORB を使用しても)。XPCOM は要件 2 を満たしていない可能性があり、MSVC では動作しないため、要件 1 を満たしていません。

他に何がありますか?私の次のステップは、protobufs などを使用して自分で作成することですが、もちろんそれは避けたいと思います。

アップデート

詳しく説明すると、このコンテキストでの音声割り込みは 2 ~ 3 ミリ秒まで低くなる可能性があります。他のコンポーネントはその時間内に処理する必要があり、私のソフトウェア自体は、その時間内に処理する必要がある別のソフトウェアをラップしているため、その時間は完全には利用できません。これが、インプロセス マーシャリングとクロスプロセス マーシャリングの両方が非常に高速である必要がある理由です。

4

9 に答える 9

3

ZeroC http://www.zeroc.com/の ICEは別の代替手段です。

それらの CORBA の古参者にとって、ミチ・ヘニングは当時の教祖の 1 人でした。彼は現在、ZeroC に所属しています。これは、すべてのターゲット (Linux を含む) を含むオープンソースのクロスプラットフォーム システムです。

C++ は言語の 1 つに過ぎず、ICE の C++ バインディングは CORBA C++ バインディングよりもはるかに優れています。

于 2009-06-07T20:25:14.013 に答える
3

幅を最大限に広げるには、Web サービスを使用します。サービス指向のアプローチは、サービス コントラクト (インターフェイス) のみが公開され、クライアントがサービスの内部動作の詳細を知る必要がないため、コンポーネント指向のアプローチに非常に近いものです。

于 2009-06-07T00:12:27.977 に答える
2

Qt は代替手段であってはなりませんか?

http://qt.io

知る限り、少なくとも以下で使用できます。マック | Linux/X11 | ソラリス | 組み込み Linux | Windows 組み込み | グリーン ヒルズ ソフトウェア QNX | VxWorks

それはかなり私見です。

于 2012-10-11T10:07:31.753 に答える
2

CORBA は確かに答えです。速度に基づいて却下する前にテストする必要があります。

明確な代替案は XPCOM http://en.wikipedia.org/wiki/XPCOMです。MSVC がないからといって、クロス プラットフォームではないというわけではありません。

幸運を

于 2009-06-06T23:59:50.607 に答える
1

さまざまなコンポーネント フレームワーク (CORBA、Gnome Bonobo、KDE ​​の DCOM) の現代的なスピリチュアルな継承者であるD-Busを見てください(はい、Windows の場合も同様です)。

プロセス間のマーシャリングがパフォーマンスの問題であることが判明した場合は、重労働を共有メモリに移動することを検討してください ( boost.interprocessは、クロスプラットフォームを維持するのに役立ちます)。

于 2009-06-07T20:32:26.993 に答える
1

CORBA の速度が十分でないのはなぜだと思いますか? 最近何かを測定しましたか?

CORBA の最新の実装では、150 マイクロ秒未満でリモート呼び出しを行うことができます。2ミリ秒の予算をはるかに下回っています。CORBA の最新の実装では、インプロセス呼び出しを基本的に 2 つの仮想関数呼び出しに最適化できますが、通常、アプリケーションはいくつかの機能 (インターセプターなど) を放棄する必要があります。いくつかの仮想通話、手元に番号はありませんが、50 ユース以下であることは確かです。

いくつかのパフォーマンス数値については、これを確認してください。

http://www.dre.vanderbilt.edu/Stats/performance.shtml

于 2009-06-07T14:42:53.560 に答える
1

あなたはCORBAが素晴らしいと言っています。使用したことがないとしか思えません。それはプログラミングの悪夢であり、それが主張する移植性を提供しません。既存のアプリケーションが既に実装している場合にのみ使用します。ただし、パフォーマンス上の理由でそれを捨てるつもりはありません。使用した CORBA 実装でパフォーマンスの問題を経験したことは一度もありません。

于 2009-06-07T14:47:19.650 に答える
0

AF アーキテクチャを見てみましょう:

「Af-Arch は、ビジネス アプリケーションに関する問題に対処するために特別に設計された分散システムの開発を可能にするライブラリとツールの完全なセットです。」

LinuxとWindowsで動作することを知っています。また、非常に高速な C API と C# バインディングがあることも知っています。

于 2009-06-07T00:17:00.243 に答える
0

VortexLibraryを調べる必要があると思います。

これは、ピア ツー ピア アプリケーション プロトコルを開発するための優れた基盤を提供する完全な BEEP 実装です。認証 (SASL を使用) と安全な接続 (TLS を使用) は既に統合されていますが、どちらもオプションです。

Vortex には、IDL コンパイラを使用した XML-RPC プロファイルの実装も含まれています。これにより、マーシャリングのための十分な基盤が提供されます....そして、同じプロトコルに加えて、より特定のプロトコルを後で提供できることが最善です。セッション、XML-RPC に制限されることなくバイナリ転送を行う。

C でプログラムされていますが、c++ でも動作します。現在、リグレッション テストにより、Linux、Windows、および MAC での機能が保証されています。

乾杯!

于 2009-06-08T07:39:35.093 に答える