WebAssembly 由许多工具支持,帮助开发人员构建和处理源文件以及生成的二进制内容。如果您是编译器编写者,喜欢底层编码或只想尝试使用原始的 WebAssembly 格式,这些工具适合您。
目前,有两套不同的工具对编译器编写者或想要使用其他工具(例如 Emscripten)生成的 WebAssembly 二进制文件的开发人员来说很有用。
此工具包支持在二进制 WebAssembly 格式和人类可读的文本格式之间进行转换。文本格式是一种 S 表达式,便于在分析或调试等目的下使用 WebAssembly 编译器的输出。
请注意,WABT 支持的 S 表达式格式本身不是 WebAssembly。它是许多可能的文本格式之一,可以表示 WebAssembly 文件的内容,因此它被开发为一种方便的格式,用于 WABT 工具进行解码和编码。开发人员可以轻松地为任何其他能够表达 WebAssembly 堆栈机器语义的文本格式构建解码器/编码器实现。
此工具将 WebAssembly 二进制文件转换为 S 表达式。它是一个命令行工具,它将二进制文件作为输入,并生成包含可读文本的输出文件。
开发人员可以以其他方式编辑或操作文本文件,并将其转换回二进制格式,用于尝试优化算法、跟踪、插入调试钩子等。
此命令行工具执行 wasm2wat 的逆操作,即它将 S 表达式 WAT 文件转换为二进制 WebAssembly 文件。
结合使用 wasm2wat 和 wat2wasm 允许对 WebAssembly 二进制文件进行无损往返,并为开发人员提供了一种方便的方法,可以使用外部工具来操作 WebAssembly 二进制文件的内容。
这是一个解释器,允许开发人员从命令行独立运行 WebAssembly 二进制文件。它实现了基于堆栈机器的解释器,该解释器直接解释 WebAssembly 二进制文件。这与浏览器在加载时将 WebAssembly 二进制文件 JIT 编译为其目标体系结构的本机代码的方式不同。
该解释器可用于运行单元测试、验证 WebAssembly 二进制文件等,而无需浏览器环境。
Binaryen 是一套全面的工具,以及支持基础设施,可作为以 WebAssembly 作为输出格式的编译器的后端。它具有 C API,并实现了自己的内部中间表示 (IR) 程序逻辑,可以对 IR 执行许多优化,支持代码生成的并行化等等。
例如,binaryen 用于编译器 asm2wasm 的一部分,该编译器可以将 asm.js 文件转换为 WebAssembly 文件。它还用于支持 LLVM 编译器基础设施生成 WebAssembly 以及从 Rust 编译。
从事编译器、高级优化技术等工作的开发人员应该利用 binaryen 及其工具,这些工具包括可以加载和解释 WebAssembly 代码的 shell、汇编器和反汇编器、将 asm.js 和 LLVM .s 文件转换为 WebAssembly 的转换器等等。
强烈建议工具开发人员探索 binaryen 实现的所有功能。