《Learn WebAssembly》读书笔记

本身是本工具书,需要的时候再翻即可,这里简单记录一个最基础的例子。


环境:Windows + wsl

Editor:VSCode(插件:WebAssembly(可用于反汇编wasm文件))

wsl环境:python2.7,node 12.14.1,emsdk(https://github.com/juj/emsdk.git)

c代码:

int addTwoNumbers(int leftValue, int rightValue) {
    return leftValue + rightValue;
}

代码编译:

emcc test.c -Os -s WASM=1 -s SIDE_MODULE=1 -s BINARYEN_ASYNC_COMPILATION=0 -o test.wasm

使用node加载运行:

let fs = require("fs")
let wasmfile = fs.readFileSync("test.wasm")
WebAssembly.instantiate(wasmfile, {}).then(
    instantiateResp =>
    {
        let addTwo = instantiateResp.instance.exports.addTwoNumbers
        console.log(addTwo(2, 3))
    }
)

在web端常使用fetch函数获取wasm文件。

另外可以在WasmFiddle环境下实验,不过国内访问不是很顺畅:https://wasdk.github.io/WasmFiddle/


PS:补充一点个人解读。wasm是一个基于栈式虚拟机的中间表示,首先语言模型偏底层,利于前端采用各种不同的语言(C/C++/Rust等);其次因为不包含动态类型、GC机制,使得性能更高更稳定。使用场景上更适合支撑大型(利用前端语言的静态检查等能力)、计算密集型项目(相比js的性能优势)。在基础库和web交互上的便利性目前还没有很好的方案。

 

posted @ 2020-01-30 20:52  rainforwind  阅读(149)  评论(0)    收藏  举报