将 WebAssembly 文本格式转换为二进制
WebAssembly 具有基于 S-表达式的文本表示形式,这是一种为在文本编辑器、浏览器开发者工具等中显示而设计的中间格式。本文档将简要介绍其工作原理,以及如何使用可用工具将文本格式文件转换为 Wasm 格式。
注意:文本格式文件通常保存为 .wat
扩展名。过去也曾使用过 .wast
扩展名,但现在它用于 WebAssembly 测试套件使用的脚本语言。
初探文本格式
让我们看一个例子——以下程序从名为 my_namespace
的模块导入一个名为 imported_func
的函数,并导出一个名为 exported_func
的函数。
(module
(func $i (import "my_namespace" "imported_func") (param i32))
(func (export "exported_func")
i32.const 42
call $i
)
)
WebAssembly 函数 exported_func
被导出,以便在我们的环境中(例如,我们正在使用 WebAssembly 模块的 Web 应用程序)使用。当它被调用时,它会调用一个名为 imported_func
的已导入 JavaScript 函数,该函数使用作为参数提供的 42 这个值来运行。
将 .wat 文本转换为 .wasm 二进制文件
让我们来尝试将上面的 .wat
文本表示示例转换为 .wasm
汇编格式。
-
首先,将上面的列表复制到一个文本文件中;将其命名为
simple.wat
。 -
在我们能够使用它之前,需要将其文本表示形式组装成浏览器实际读取的汇编语言。为此,我们可以使用 wabt 工具,该工具包含用于在 WebAssembly 的文本表示和 Wasm 之间相互转换的编译器,以及更多功能。请访问 https://github.com/webassembly/wabt — 按照此页面上的说明设置该工具。
-
获得工具构建后,将
/wabt/out/clang/Debug
目录添加到您的系统PATH
。 -
接下来,执行 wat2wasm 程序,将其输入文件路径作为参数传递,然后是
-o
参数,然后是输出文件路径。bashwat2wasm simple.wat -o simple.wasm
这将把 Wasm 转换为一个名为 simple.wasm
的文件,其中包含 .wasm
汇编代码。
注意:您也可以使用 wasm2wat 工具将汇编转换回文本表示形式;例如 wasm2wat simple.wasm -o text.wat
。
查看汇编输出
由于输出文件是基于汇编的,因此无法在普通文本编辑器中查看。但是,您可以使用 wat2wasm 工具的 -v
选项来查看它。试试这个:
wat2wasm simple.wat -v
这将以如下方式在您的终端中生成输出:
另见
- 理解 WebAssembly 文本格式 — 对文本格式语法的详细解释。
- 从 C/C++ 编译到 WebAssembly — Binaryen/Emscripten 等工具都可以将您的源代码编译为 Wasm,并创建在 JavaScript 上下文中运行模块所需的 API 代码。了解更多关于如何使用它们。
- 使用 WebAssembly JavaScript API — 如果您想了解更多关于 WebAssembly API 代码的工作原理,请阅读此文档。
- 文本格式 — 在 WebAssembly GitHub 仓库中更详细地解释了文本格式。
- wast-loader — 一个用于 webpack 的加载器,它可以为您处理所有这些。