私は、コンポーネント ベースのプログラミング (COM、別のシステム、または単純な C++ のパラダイムを使用するもの) に夢中になっています。「伝統的な」OOPモデルに通常慣れている場合は、少し慣れる必要がありますが、それだけの価値はあります。コードの保守性と拡張性が向上しました。
私が現在取り組んでいるプロジェクトは、パラダイムを使用していますが、セットのシステムはありません。ただし、次の要件で使用できる何らかのシステムを見つけたいと思っています。現在使用しているシステムから新しいシステムに切り替えるには少し時間がかかりますが、後でその時間を何倍も節約できます。
要求事項:
- クロスプラットフォーム
- 速い
- C++ でうまく動作する
- プロセス間のマーシャリングをサポート
これらの要件について詳しく説明しましょう。
クロスプラットフォーム
基本的に、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 ミリ秒まで低くなる可能性があります。他のコンポーネントはその時間内に処理する必要があり、私のソフトウェア自体は、その時間内に処理する必要がある別のソフトウェアをラップしているため、その時間は完全には利用できません。これが、インプロセス マーシャリングとクロスプロセス マーシャリングの両方が非常に高速である必要がある理由です。