你应该知道的工具

这是一个精心策划的清单,列出了在进行 Rust 和 WebAssembly 开发时应该了解的一些非常棒的工具。

开发、构建和工作流编排

wasm-pack | repository

wasm-pack 是成为一个一站式的构建和使用 Rust 生成的 WebAssembly 库,使你可以在 Web上 或 Node.js 上与 JavaScript 进行互操作。 wasm-pack 帮助你构建并将生成的 WebAssembly 发布到 npm 注册表,以便与你已经使用的工作流中的任何其他 JavaScript 包一起使用。

优化和操作 .wasm 二进制文件

wasm-opt | repository

wasm-opt 工具读取 WebAssembly 作为输入,运行转换、优化和/或检测传递,然后将转换后的 WebAssembly 作为输出发送。 在 LLVM 通过 rustc 生成的 .wasm 二进制文件上运行它通常会创建更小、执行更快的 .wasm 二进制文件。 这个工具是 binaryen 项目的一部分。

wasm2js | repository

wasm2js 工具将 WebAssembly 编译成 “asm.js”。 这对于支持没有 WebAssembly 实现的浏览器非常有用,比如 Internet Explorer 11。 这个工具是 binaryen 项目的一部分。

wasm-gc | repository

垃圾收集 WebAssembly 模块并删除所有不需要的导出、导入、函数等的小工具。 这实际上是 WebAssembly 的 --gc-sections 链接器标志。

你通常不需要自己使用此工具,因为有两个原因:

  1. rustc 现在有了足够新的 lld 版本,它支持 WebAssembly 的 --gc-sections 标志。这将自动为LTO生成启用。
  2. wasm-bindgen CLI 工具会自动运行 wasm-gc

wasm-snip | repository

wasm-snip 将 WebAssembly 函数的主体替换为无法访问的指令。

也许你知道某些函数永远不会在运行时被调用,但是编译器不能在编译时证明这一点? 删掉它!然后再次运行 wasm-gc,它传递调用的所有函数(在运行时也不能调用)也将被删除。

这对于在非调试生产构建中强制清除 Rust Panic 的基础设施非常有用。

Inspecting .wasm Binaries

twiggy | repository

twiggy.wasm 二进制文件的代码大小分析器。 它分析二进制的调用来回答如下问题:

  • 为什么这个函数首先包含在二进制文件中?也就是说,哪些导出函数正在传递地调用它?
  • 这个函数的保留大小是多少?也就是说,如果我删除了它以及所有在删除后变成死代码的函数,会节省多少空间。

使用 twiggy 使你的二进制文件更轻量!

wasm-objdump | repository

打印有关 .wasm 二进制文件及其每个部分的低级详细信息。 还支持反汇编成 WAT 文本格式。 它类似于 objdump,但用于 WebAssembly。 这是 WABT 项目的一部分。

wasm-nm | repository

列出在 .wasm 二进制文件中定义的导入、导出和私有函数符号。