在瀏覽器之外運行 WASM
WebAssembly 被運行在一個瀏覽器中,提供了理想的安全性、速度和可移植性。
-
安全性,因爲它不能直接訪問 “主機” 瀏覽器。
-
具有底層代碼的速度
-
通過系統能力實現可移植性
WASM 經常在以下領域被使用:
-
Serverless
-
Blockchain:Ethereum 2.0
-
IoT
-
Games
什麼是 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