使用 C++ 編寫通用庫并在 Rust 中使用它 (WASI)
WebAssembly 簡介
WebAssembly 是一種二進制指令格式,旨在成為一種低級虛擬機,可以在 Web 瀏覽器中以接近本機的速度運行代碼。它不特定于網絡,也可以在其他平臺上運行。WebAssembly 代碼可以從各種編程語言編譯而來,例如 C、C++、Rust、C# 等。 Wasmer 是一個輕量級且快速的 WebAssembly 運行時,可以在各種平臺上運行 WebAssembly 模塊,包括 Windows、Linux 和 macOS。Wasmer 支持多種編程語言,包括 C、C++、Rust 等。
使用 C++ 創建 WebAssembly 庫
首先,我們將使用 C++ 創建一個簡單的“加法”函數,它將兩個整數作為輸入并返回它們的和。
// add.cpp extern "C" { int add ( int a, int b) { return a + b; } }
在這段代碼中,我們將使用 Rust 中的 add 函數。使用外部“C”是為了使函數“add”不被編譯器破壞。我們將不得不在我們的 Rust 代碼中使用相同的名稱。以下是將代碼編譯為 WebAssembly 的更新命令:
wasmc++ add.cpp -o add.wasm
完成執行后,您應該能夠看到文件 add.wasm。我們會將這個 Web 程序集加載到我們的 Rust 項目中。
在 Rust 中使用它
讓我們使用創建一個簡單的 Rust 項目
cargo new wasmer-consume
在 Cargo.toml 中添加如下依賴
wasmer = “3.1.1” wasmer-wasi = “3.1.1”
替換main.rs中的以下代碼
use wasmer::{Instance, Module, Store, Value, Function}; use wasmer_wasi::{WasiState, WasiEnv, generate_import_object_from_env, WasiFunctionEnv}; fn main() -> Result<(), Box
當您運行cargo run命令時,如果一切順利,您應該會看到以下內容:
.
我們可以看到該函數在控制臺應用程序中可用。現在讓我們看看如何在瀏覽器中使用它。
結論
盡管這個例子很簡單,但從概念上講,它為“一次編寫,到處運行”開辟了新的含義。Webassembly 作為一項技術仍處于初期階段。它幫助我們彌合編程語言和平臺之間的鴻溝。
責任編輯:彭菁
-
模塊
+關注
關注
7文章
2723瀏覽量
47603 -
C++
+關注
關注
22文章
2113瀏覽量
73738 -
虛擬機
+關注
關注
1文章
919瀏覽量
28315
原文標題:【Rust日報】2023-06-07 使用 C++ 編寫通用庫并在 Rust 中使用它 (WASI)
文章出處:【微信號:Rust語言中文社區,微信公眾號:Rust語言中文社區】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論