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

Nur*_*yev 5 c++ rust wasm-bindgen

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

Mat*_* M. 8

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

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

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

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

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

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

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