如何将WebAssembly文本格式(.wat)的程序转换为JavaScript中的二进制格式



我想用JavaScript制作一个简单的WebAssembly交互式小提琴。假设用户以文本格式输入WebAssembly源代码,我如何将其转换为运行它所需的二进制格式?

我正在寻找一个浏览器内JavaScript解决方案。

Binaryen是WebAssembly的编译器基础设施,它有一个官方的JavaScript/WebAssembly端口,您可以从JavaScript中使用,包括在浏览器中:https://www.npmjs.com/package/binaryen.

以下是如何使用它来解析WAT、发出二进制文件并从中实例化模块:

var binaryen = require("binaryen");
// Create a module from a WebAssembly Text format
var myModule = binaryen.parseText(`(module
(type $i32_i32_=>_i32 (func (param i32 i32) (result i32)))
(export "add" (func $add))
(func $add (; 0 ;) (; has Stack IR ;) (param $0 i32) (param $1 i32) (result i32)
(i32.add
(local.get $0)
(local.get $1)
)
)
)`);
// Emit module in a binary format
var wasmData = myModule.emitBinary();
// Use WebAssembly API to instantiate a compiled module
var compiled = new WebAssembly.Module(wasmData);
var instance = new WebAssembly.Instance(compiled, {});
// And use it
console.log(instance.exports.add(41, 1));

请注意,这个特定的示例使用以Node.js为目标的require(...),但通过使用bundler或在页面上包含一个脚本,使用文档中的链接从一个CDN指向Binaryen的客户端版本,将其移植到浏览器应该足够容易。

最新更新