美文网首页TCP/IP
WebAssembly 技术汇总

WebAssembly 技术汇总

作者: 一个灰 | 来源:发表于2018-10-23 16:38 被阅读0次

    官方网站

    https://webassembly.org/

    要点

    1. 文件格式(wasm,wast/wat,asm.js)
    2. 编译(emscripten)
    3. 编程语言(C/C++、Rust、Golang、Javascript、Typescript)
    4. 执行环境(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格式,可以通过

    1. 使用emscripten编译命令加上参数-s WASM=1来得到
     emcc -o test.js -s WASM=1 test.c
    

    我们将获得一个test.wasm格式的文件和一个test.js文件。
    其中test.js中有大量对wasm的封装,方便操控wasm的内存。

    1. 使用工具将wast格式转换成wasm格式
      https://webassembly.github.io/wabt/demo/wat2wasm/

    2. 其他语言编译得到

    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)

    https://assemblyscript.org/

    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 文件即可直接运行

    相关文章

      网友评论

        本文标题:WebAssembly 技术汇总

        本文链接:https://www.haomeiwen.com/subject/gafazftx.html