官方網站
要點
- 文件格式(wasm,wast/wat,asm.js)
- 編譯(emscripten)
- 編程語言(C/C++、Rust、Golang、Javascript、Typescript)
- 執行環境(browser、node.js、kernel)
Mozilla 開發的在線IDE,支持Rust、C、Wat開發WebAssembly https://webassembly.studio/
在線編譯C到wasm https://wasdk.github.io/WasmFiddle/
wasm格式
wasm是WebAssembly的二進制字節碼,後面將直接用wasm來指代WebAssembly。 要獲得wasm格式,可以通過
- 使用emscripten編譯命令加上參數
-s WASM=1
來得到
emcc -o test.js -s WASM=1 test.c
我們將獲得一個test.wasm格式的文件和一個test.js文件。 其中test.js中有大量對wasm的封裝,方便操控wasm的內存。 2. 使用工具將wast格式轉換成wasm格式 https://webassembly.github.io/wabt/demo/wat2wasm/
- 其他語言編譯得到
wast/wat格式
wast和wat的區別 https://webassembly.js.org/docs/contrib-wat-vs-wast.html wast/wat格式是wasm的文本類型格式,使用的是lisp語言的S表達式。 可以 使用工具將wasm轉換成wast/wat格式 https://webassembly.github.io/wabt/demo/wasm2wat/
Asm.js
emscripten 不加參數-s WASM=1
即可編譯成asm.js的代碼,asm.js可以兼容大多數瀏覽器。
Golang編譯成wasm
GOARCH=wasm GOOS=js go build -o test.wasm main.go
JavaScript(walt)編譯成wasm
walt項目:https://github.com/ballercat/walt 該項目可以編寫javascript代碼來生成wasm。 可以通過webpack打包(walt-loader)、walt-cli命令行編譯等方式。
npm i walt-cli
walt -- test.walt -o test.wasm
TypeScript (AssemblyScript)
C#編譯成wasm
https://github.com/migueldeicaza/mono-wasm https://github.com/aspnet/Blazor
eos中編譯成wast
eosiocpp -o test.wast test.cpp
瀏覽器中調用
fetch('module.wasm').then(response =>
response.arrayBuffer()
).then(bytes =>
WebAssembly.instantiate(bytes, importObject)
).then(results => {
// Do something with the compiled results!
});
Node.js中使用
const fs = require('fs')
const wasmFile = fs.readFileSync('test.wasm')
WebAssembly.instantiate(fs).then(module=>{
module.exports.xxx()
})
使用Linux內核模式調用wasm
https://github.com/rianhunter/wasmjit
Mac中直接執行wasm
在 Mac 系統下通過 brew install binaryen 安裝成功後,通過 wasm-shell f.wasm 文件即可直接運行