可以编译成wasm的C ++和Rust程序以某种方式互操作吗?

时间:2019-12-19 15:39:26

标签: c++ rust wasm-bindgen

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

1 个答案:

答案 0 :(得分:6)

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

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

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

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

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

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

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