WebAssembly 技术汇总

本文深入探讨WebAssembly(wasm)的技术细节,包括其文件格式、编译方式、支持的编程语言及执行环境。介绍了如何使用emscripten、wabt等工具进行wasm的编译与转换,以及在浏览器、Node.js和Linux内核模式下调用wasm的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

官方网站

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的内存。 2. 使用工具将wast格式转换成wasm格式 https://webassembly.github.io/wabt/demo/wat2wasm/

  1. 其他语言编译得到

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

转载于:https://my.oschina.net/langhuihui/blog/2251405

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值