影片地址:www.bilibili.com/video/BV1eg411g7c...
相關原始碼:github.com/anonymousGiga/Rust-and-...
低水平控制與高水平的人體工程學
JavaScript Web應用程式很難獲得和保持可靠的效能。
Rust為程式設計師提供了低階別的控制和可靠的效能。較小的.wasm
程式碼大小非常重要,因為 .wasm必須透過網路下載。Rust沒有執行時,因此支援較小的.Wasm。不用全部重寫
使用Rust並不是將現有的程式碼扔掉,我們可以將部分js函式轉換成Rust程式碼。和其它的和善相處
Rust和WebAssembly與現有JavaScript工具整合,支援ECMAScript模組,你可以繼續使用之前的工具,如npm、Webpack。便利的基礎設施
Rust中擁有開發者所期望的便利的工具,如:
Cargo、零成本抽象、開放熱情的社群。
WebAssembly(wasm)是一種簡單的機器模型和具有廣泛規範的可執行格式。它被設計成可移植的、緊湊的,並且以或接近本機速度執行。
WebAssembly有兩種表示相同結構的格式:
- .wat 文字格式(WebAssembly Text)使用S表示式,和Lisp家族的語言有些類似;
- .wasm二進位制格式,級別較低,直接供wasm虛擬機器使用,它在概念上類似於ELF和Mach-O。
2.1 線性儲存器
WebAssembly有一個非常簡單的記憶體模型。wasm模組可以訪問單個的線性記憶體(本質就是陣列),此記憶體可以按照頁大小(64K)的倍數增長,但是不能縮小。
2.2 WebAssembly是不是隻為Web使用
wasm並沒有對其宿主環境做出任何假設,但是到目前為止,主要還是與js相關。
- 安裝Rust
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
- 安裝wasm-pack
cargo install wasm-pack
建立工程
cargo new --lib mywasm
編寫程式碼
在src/lib.rs中新增如下程式碼:
use wasm_bindgen::prelude::*;
#[wasm_bindgen]
extern {
pub fn alert(s: &str);
}
#[wasm_bindgen]
pub fn greet(name: &str) {
alert(&format!("Hello, {}!", name));
}
修改Cargo.toml配置檔案,新增如下:
[lib]
crate-type = ["cdylib"]
[dependencies]
wasm-bindgen = "0.2"
- 編譯package
wasm-pack build --target web
- 使用package
在mywasm根目錄下建立index.html,程式碼如下:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>hello-wasm example</title>
</head>
<body>
<script type="module">
import init, {greet} from "./pkg/hello_wasm.js";
init()
.then(() => {
greet("WebAssembly")
});
</script>
</body>
</html>
- 執行server
python3 -m http.server
- 測試
在瀏覽器中輸入: localhost:8000
本作品採用《CC 協議》,轉載必須註明作者和本文連結