6

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

4

1 回答 1

9

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

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

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

当您听说C 是编程语言的通用语时,这意味着任何使用 C ABI 1的语言都可以与使用 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。

于 2019-12-19T16:07:29.540 回答