高级工具

WebAssembly由很多工具来支持开发者构建处理源文件输出二进制文件。如果你是一个写编译器的人、想尝试低级代码或只想尝试使用原始的WebAssembly格式进行试验,这些工具适合你。

目前有两套不同的工具,编译器作者或者 WebAssembly开发者可以使用这些工具输出二进制文件,比如说Emscripten:

  • WABT - WebAssembly 二进制工具包
  • Binaryen - 编译器和工具链基础包

WABT: WebAssembly 二进制工具包

这个工具可以将二进制的 WebAssembly 代码和人类可以阅读的文本格式代码相互转换。文本格式代码类似于 S-expression,这种文本格式的代码可以方便 WebAssembly 的编译器输出并进行分析和调试。

注意,S-expression 格式是WABT来支持的,并不是WebAssembly本身。它是可以用来表示 WebAssembly的很多文本格式的语言之一,所以,他被开发成一个便于WABT工具编解码的格式。开发者能够非常简单的为其他的文本格式构建解码器/编码器,可以轻松的表达WebAssembly的堆栈机器语义。

wasm2wast 工具

这个工具将 WebAssembly 二进制转换为 S-expressions。他是命令行工具,一个二进制文件作为输入,输出一个包含可以读文本的文件

开发者可以编辑文本文件,然后再将其转换为二进制文件,比如优化算法、追踪问题、插入调试语句等等。

wast2wasm 工具

这个命令行工具和 wasm2wast 是反的。也就是说,它将一个 S-expression WAST 文件转换为二进制的 WebAssembly文件。

使用 wasm2wastwast2wasm 可以掌控 WebAssembly 的二进制代码,开发者可以通过工具来操作修改 WebAssembly 的二进制代码。

wasm-interp 工具

这个工具是个可以让 WebAssembly 二进制代码在命令行中运行的翻译器。它实现了基于堆栈机的解释器,直接解释 WebAssembly二进制文件。和浏览器将 WebAssembly 二进制通过JIT转换成目标机器的原生代码不一样的是,他不需要加载时间。

这个解释器对单元测试、检测二进制文件可用性等等很有用。是脱离浏览器的一个环境。

Binaryen

Binaryen是一套全面的工具,用作将WebAssembly作为输出格式定位的编译器的后端。它具有 C API 和一套自己的逻辑程序的中间表示(IR),并可以在 IR 上执行一些优化,支持代码合并等。

比如,binaryen 使用了 asm2wasm 作为编译器,将 asm.js 转换成 WebAssembly 文件。它还支持 LLVM 编译器的基础架构,可以将Rust 转换成 WebAssembly。

从事编译器,高级优化技术等工作的开发人员应该利用binaryen及其工具,其中包括可以加载和解释WebAssembly代码,汇编器和反汇编器的shell,asm.js的转换器和LLVM .s文件到WebAssembly等等。

强烈建议工具开发人员探索由binaryen实现的全套功能。