如何将 WebAssembly 文本格式 (.wat) 的程序转换为 JavaScript 中的二进制格式?
How can I translate a program in WebAssembly Text Format (.wat) to binary format in JavaScript?
我想在 JavaScript 中制作一个简单的 WebAssembly 交互式 fiddle。鉴于用户以文本格式输入 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 [=10=] i32) (param i32) (result i32)
(i32.add
(local.get [=10=])
(local.get )
)
)
)`);
// 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));
请注意,此特定示例使用 require(...)
目标 Node.js,但通过使用捆绑程序或在页面上包含指向使用 links in the docs.
来自其中一个 CDN 的 Binaryen 客户端版本
我想在 JavaScript 中制作一个简单的 WebAssembly 交互式 fiddle。鉴于用户以文本格式输入 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 [=10=] i32) (param i32) (result i32)
(i32.add
(local.get [=10=])
(local.get )
)
)
)`);
// 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));
请注意,此特定示例使用 require(...)
目标 Node.js,但通过使用捆绑程序或在页面上包含指向使用 links in the docs.