簡體   English   中英

編譯為 wasm 的 C++ 和 Rust 程序能否以某種方式互操作?

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

假設我有一個用 Rust 編寫的程序和另一個用 C++ 編寫的程序。 鑒於它們都被編譯為 Wasm,我可以以某種方式從另一個程序中調用一個函數嗎?

是的,如果他們共享相同的 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。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM