在瀏覽器之外運行 WASM

WebAssembly 被運行在一個瀏覽器中,提供了理想的安全性、速度和可移植性。

WASM 經常在以下領域被使用:

什麼是 WebAssembly?

官方定義:WebAssembly(縮寫爲 Wasm) 是一種基於堆棧的虛擬機的二進制指令格式。Wasm 被設計爲編程語言的可移植編譯目標,支持在 web 上部署客戶端和服務器應用程序。

這個定義簡化爲:一個二進制代碼,可以在瀏覽器中運行,具有高性能。

這個定義有點惡作劇,WebAssembly 不僅可以在瀏覽器中運行,它還可以在運行時中運行,就像 Node.js 一樣,提供了良好的性能和安全性。

什麼是 wasmtime?

要在瀏覽器中運行 WebAssembly 代碼,需要一個名爲 wasmtime 的運行時。wasmtime 是 Bytecode 聯盟的一個項目,它支持 WebAssembly 作爲命令行工具或庫在另一個項目中運行。

從理論上講,基於 WebAssembly 的本質,它不能訪問 “主機” 和來自系統的 API,這就是 WASI 出現的地方。

什麼是 WASI?

安裝 wasmtime

在 Linux 發行版和 macOS 中,只需運行這個命令,按照步驟操作,安裝就會很順利。

curl https://wasmtime.dev/install.sh -sSf | bash

該項目維護 C/C++ 和 Rust 的正式 WASI。在這裏,將使用 Rust 演示它是如何工作的。首先,我們添加 wasm32-wasi 來將 Rust 代碼構建到 WASM,並使其能夠與 wasmtime 一起運行。

rustup target add wasm32-wasi

如果一切正常,現在可以將 Rust 項目與目標編譯爲 wasm32-wasi。

新建一個 Rust 項目:

cargo new wasmtime-example

src/main.rs 中的代碼爲:

fn main() {
    println!("Hello, wasmtime!");
}

執行以下命令編譯:

cargo build --target wasm32-wasi

編譯後的模塊位於 target/wasm32-wasi/debug 目錄中,其名稱與項目名稱相同。

執行以下命令運行:

wasmtime target/wasm32-wasi/debug/wasmtime-example.wasm

結果爲:

Hello, wasmtime!
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/RpDXu68gn0TVq-wKRRhUUA