9.2 策略

02-策略 — Comprehensive Rust

译文 · 基于 Comprehensive Rust

原文链接: https://google.github.io/comprehensive-rust/unsafe-deep-dive/ffi/strategies.html

9.2 策略

直接共享数据结构与符号非常困难:

╭────────────╮                                          ╭────────────╮
│            │                                          │            │
│            │ <--------------------------------------> │            │
│            │                                          │            │
╰────────────╯                                          ╰────────────╯
     Rust                                                    "C++"

通过 C ABI 进行 FFI 要可行得多:

╭────────────╮          ╭───╮           ╭───╮          ╭────────────╮
│            │          │   │           │   │          │            │
│            │ <----->  │   │ <~~~~~~~> │   │ <------> │            │ 
│            │          │   │           │   │          │            │
╰────────────╯          ╰───╯           ╰───╯          ╰────────────╯
    Rust                  C               C                 "C++"

其他策略:

  • 分布式系统(RPC)
  • 自定义 ABI(例如 WebAssembly Interface Types)

高保真互操作

理想场景目前仍处于实验阶段。

探索这一方向的两个项目是 crubit 与 Zngur。前者在两侧提供胶水代码,使兼容类型能在域之间无缝工作;后者依赖动态分发,将 C++ 对象作为 trait 对象导入 Rust。

低保真互操作 通过 C API 实现。

互操作的典型策略是以 C 语言作为接口。C 是一种有损编解码器。该策略通常会在两侧都产生复杂的代码。

其他策略 在零成本环境中可行性较低。

分布式系统 会引入运行时开销。

调用外部库中的方法需要经过序列化、传输、反序列化的往返,开销显著。一般而言,透明的 RPC 并不是好主意——中间隔着网络。

自定义 ABI(例如 wasm)需要运行时或大量实现成本。

最后修改 August 11, 2026: 更新 (70a5af133)