这是使用 Rust 和 WebAssembly 的**未发布**文档,已发布的文档可在 Rust 和 WebAssembly 主文档网站上找到 。此处记录的功能可能在 Rust 和 WebAssembly 工具的发布版本中不可用。

您应该知道的工具

这是一个精选的工具列表,您在进行 Rust 和 WebAssembly 开发时应该了解这些工具。

开发、构建和工作流编排

wasm-pack | 仓库

wasm-pack 旨在成为构建和使用 Rust 生成的 WebAssembly 的一站式商店,您希望将其与 Web 或 Node.js 上的 JavaScript 交互操作。wasm-pack 帮助您构建和发布 Rust 生成的 WebAssembly 到 npm 注册表,以便与您已在使用的任何其他 JavaScript 包一起使用在您已使用的工作流程中。

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

wasm-opt | 仓库

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

wasm2js | 仓库

wasm2js 工具将 WebAssembly 编译成“几乎是 asm.js”。这非常适合支持没有 WebAssembly 实现的浏览器,例如 Internet Explorer 11。此工具是 binaryen 项目的一部分。

wasm-gc | 仓库

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

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

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

wasm-snip | 仓库

wasm-snip 将 WebAssembly 函数的主体替换为 unreachable 指令。

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

这对于在非调试生产构建中强制删除 Rust 的恐慌基础设施很有用。

检查 .wasm 二进制文件

twiggy | 仓库

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

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

使用 twiggy 使您的二进制文件更精简!

wasm-objdump | 仓库

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

wasm-nm | 仓库

列出 .wasm 二进制文件中定义的导入、导出和私有函数符号。它就像 nm,但用于 WebAssembly。