使用 C++ 編寫通用庫并在 Rust 中使用它 (WASI)
WebAssembly 簡介
WebAssembly 是一種二進制指令格式,旨在成為一種低級虛擬機,可以在 Web 瀏覽器中以接近本機的速度運行代碼。它不特定于網(wǎng)絡(luò),也可以在其他平臺上運行。WebAssembly 代碼可以從各種編程語言編譯而來,例如 C、C++、Rust、C# 等。 Wasmer 是一個輕量級且快速的 WebAssembly 運行時,可以在各種平臺上運行 WebAssembly 模塊,包括 Windows、Linux 和 macOS。Wasmer 支持多種編程語言,包括 C、C++、Rust 等。
使用 C++ 創(chuàng)建 WebAssembly 庫
首先,我們將使用 C++ 創(chuàng)建一個簡單的“加法”函數(shù),它將兩個整數(shù)作為輸入并返回它們的和。
// add.cpp extern "C" { int add ( int a, int b) { return a + b; } }
在這段代碼中,我們將使用 Rust 中的 add 函數(shù)。使用外部“C”是為了使函數(shù)“add”不被編譯器破壞。我們將不得不在我們的 Rust 代碼中使用相同的名稱。以下是將代碼編譯為 WebAssembly 的更新命令:
wasmc++ add.cpp -o add.wasm
完成執(zhí)行后,您應(yīng)該能夠看到文件 add.wasm。我們會將這個 Web 程序集加載到我們的 Rust 項目中。
在 Rust 中使用它
讓我們使用創(chuàng)建一個簡單的 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
當(dāng)您運行cargo run命令時,如果一切順利,您應(yīng)該會看到以下內(nèi)容:
.
我們可以看到該函數(shù)在控制臺應(yīng)用程序中可用?,F(xiàn)在讓我們看看如何在瀏覽器中使用它。
結(jié)論
盡管這個例子很簡單,但從概念上講,它為“一次編寫,到處運行”開辟了新的含義。Webassembly 作為一項技術(shù)仍處于初期階段。它幫助我們彌合編程語言和平臺之間的鴻溝。
責(zé)任編輯:彭菁
-
模塊
+關(guān)注
關(guān)注
7文章
2689瀏覽量
47418 -
C++
+關(guān)注
關(guān)注
22文章
2107瀏覽量
73591 -
虛擬機
+關(guān)注
關(guān)注
1文章
914瀏覽量
28153
原文標題:【Rust日報】2023-06-07 使用 C++ 編寫通用庫并在 Rust 中使用它 (WASI)
文章出處:【微信號:Rust語言中文社區(qū),微信公眾號:Rust語言中文社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論