WebAssembly 技術(shù)匯總

官方網(wǎng)站

https://webassembly.org/

要點

  1. 文件格式(wasm,wast/wat,asm.js)
  2. 編譯(emscripten)
  3. 編程語言(C/C++、Rust、Golang、Javascript、Typescript)
  4. 執(zhí)行環(huán)境(browser、node.js、kernel)

Mozilla 開發(fā)的在線IDE,支持Rust、C、Wat開發(fā)WebAssembly
https://webassembly.studio/

在線編譯C到wasm
https://wasdk.github.io/WasmFiddle/

wasm格式

wasm是WebAssembly的二進(jìn)制字節(jié)碼,后面將直接用wasm來指代WebAssembly。
要獲得wasm格式,可以通過

  1. 使用emscripten編譯命令加上參數(shù)-s WASM=1來得到
 emcc -o test.js -s WASM=1 test.c

我們將獲得一個test.wasm格式的文件和一個test.js文件。
其中test.js中有大量對wasm的封裝,方便操控wasm的內(nèi)存。

  1. 使用工具將wast格式轉(zhuǎn)換成wasm格式
    https://webassembly.github.io/wabt/demo/wat2wasm/

  2. 其他語言編譯得到

wast/wat格式

wast和wat的區(qū)別
https://webassembly.js.org/docs/contrib-wat-vs-wast.html
wast/wat格式是wasm的文本類型格式,使用的是lisp語言的S表達(dá)式。
可以 使用工具將wasm轉(zhuǎn)換成wast/wat格式
https://webassembly.github.io/wabt/demo/wasm2wat/

Asm.js

emscripten 不加參數(shù)-s WASM=1即可編譯成asm.js的代碼,asm.js可以兼容大多數(shù)瀏覽器。

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)

https://assemblyscript.org/

C#編譯成wasm

https://github.com/migueldeicaza/mono-wasm
https://github.com/aspnet/Blazor

eos中編譯成wast

eosiocpp -o test.wast test.cpp

瀏覽器中調(diào)用

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內(nèi)核模式調(diào)用wasm

https://github.com/rianhunter/wasmjit

Mac中直接執(zhí)行wasm

在 Mac 系統(tǒng)下通過 brew install binaryen 安裝成功后,通過 wasm-shell f.wasm 文件即可直接運行

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容