编译为 wasm 的 C++ 和 Rust 程序能否以某种方式互操作?

Can C++ and Rust programs compiled to wasm interoperate somehow?

假设我有一个用 Rust 编写的程序和另一个用 C++ 编写的程序。鉴于它们都被编译为 Wasm,我能否以某种方式从一个程序中调用另一个程序中的函数?

是,如果它们共享相同的 ABI

编译为汇编时,重要的是 ABI,或应用程序二进制接口:

  • 类型在内存中是如何表示的?
  • 如何将参数传递给函数?
  • ...

当您听到 C 是编程语言的通用语言,这意味着任何使用 C ABI 的语言1可以与任何其他使用 C ABI 的语言进行交流。

因此,无论是针对 Windows x64 还是 WebAssembly,真正重要的是两个程序在相互交谈时共享相同的约定 (ABI)。

在您的情况下,Rust 和 C++ 都可以使用 C 进行通信,因此通过 C API 进行通信,它们可以在 x86、x64、各种 ARM……当然还有 WASM 上进行通信。

1 作为惯例,平台的所有者为该平台定义 C ABI,并且所有 C 编译器在针对该平台时实现定义的 ABI .这意味着存在多个不兼容的 C ABI;然而,由于 ABI 仅在二进制级别交互时才重要,而这仅在同一平台上执行时才会发生,因此实际上在任何给定情况下都有一个相关的 C ABI。