相互運用の戦略

データ構造やシンボルを直接共有することは非常に困難です:

RustC++

C ABI を介した FFI のほうが、はるかに実現しやすいです:

RustCCC++

その他の戦略:

  • 分散システム (RPC)
  • カスタム ABI(つまり WebAssembly Interface Types)

高忠実度の相互運用

理想的なシナリオは、現在のところ実験段階です。

これを探究しているプロジェクトとして、crubitZngur があります。前者は、互換性のある型が ドメインをまたいでシームレスに動作できるように、各側でグルーコードを提供します。後者は 動的ディスパッチに依存し、C++ オブジェクトを Rust に trait object として取り込みます。

C API を介する低忠実度の相互運用

相互運用の典型的な戦略は、インターフェースとして C 言語を使うことです。C は 損失のあるコーデックです。この戦略では、通常、両側で複雑なコードが必要になります。

その他の戦略 は、ゼロコスト環境では現実性が低くなります。

分散システム はランタイムコストを伴います。

外部ライブラリのメソッド呼び出しでは、シリアライズ/転送/デシリアライズの 往復が発生するため、大きなオーバーヘッドを招きます。一般論として、 透過的な RPC は良い考えではありません。間にネットワークが入るからです。

wasm などの カスタム ABI は、ランタイムまたは大きな実装コストを必要とします。