14 个不稳定版本 (6 个破坏性版本)

0.116.1 2024 年 3 月 31 日
0.116.0 2023 年 10 月 19 日
0.114.2 2023 年 10 月 18 日
0.114.0 2023 年 7 月 31 日
0.0.0 2022 年 7 月 17 日

#1 in #passes

Download history 48443/week @ 2024-04-23 39013/week @ 2024-04-30 33860/week @ 2024-05-07 38879/week @ 2024-05-14 43248/week @ 2024-05-21 48168/week @ 2024-05-28 37602/week @ 2024-06-04 37050/week @ 2024-06-11 36844/week @ 2024-06-18 41600/week @ 2024-06-25 40221/week @ 2024-07-02 39410/week @ 2024-07-09 50754/week @ 2024-07-16 49704/week @ 2024-07-23 42577/week @ 2024-07-30 50739/week @ 2024-08-06

每月下载量 202,408
用于 100 个包 (直接使用 24 个)

MIT/Apache

6MB
126K SLoC

C++ 102K SLoC // 0.2% comments Bitbake 11K SLoC // 0.0% comments JavaScript 5K SLoC // 0.0% comments Python 4K SLoC // 0.2% comments Rust 2K SLoC // 0.0% comments WebAssembly 1K SLoC // 0.0% comments C 143 SLoC // 0.1% comments Shell 62 SLoC // 0.1% comments

Rust 对 Binaryen 的 wasm-opt 的绑定

wasm-opt 是 Binaryen 工具套件中的一个组件,用于优化 WebAssembly 模块。它是用 C++ 编写的。


lib.rs:

wasm-opt WebAssembly 优化器的 Rust 绑定。

wasm-opt 是 Binaryen 工具套件中的一个组件,用于优化 WebAssembly 模块。它是用 C++ 编写的。

本项目提供了一个 Rust 包,可以构建 wasm-opt

  1. 通过 cargo install 安装其命令行界面,
  2. 提供 API 以程序化访问。

安装二进制文件

cargo install wasm-opt --locked

它的行为应该与从其他来源安装的 wasm-opt 完全相同。

使用库

该包提供了一个 OptimizationOptions 类型,该类型遵循构建器模式,其选项与 wasm-opt 的命令行选项非常相似。构建完成后,调用 OptimizationOptions::run 加载、优化并写入优化后的模块。

use wasm_opt::OptimizationOptions;

let infile = "hello_world.wasm";
let outfile = "hello_world_optimized.wasm";

OptimizationOptions::new_optimize_for_size()
    .run(infile, outfile)?;

提供了所有典型优化配置的构造函数

默认情况下,`run` 方法将读取二进制 `wasm` 或文本 `wat` 文件,检查前几个字节以获取二进制头并适当选择,并将其写入二进制 `wasm` 文件。这种行为可以通过 `OptimizationOptions::reader_file_type` 和 `OptimizationOptions::writer_file_type` 来更改。

启用和禁用 WASM 功能

WebAssembly 规范具有 可选功能,由 Feature 枚举表示。当已知时,`Feature` 变体将链接到每个功能的相应规范。《wasm-opt》可以通过使用 `OptimizationOptions::enable_feature` 和 `OptimizationOptions::disable_feature` 方法单独配置对这些功能的支持。

默认情况下,Binaryen(以及这个 crate)默认启用这些常用功能

没有附加功能的原始 WebAssembly 规范被称为 MVP 规范。要仅启用 MVP 功能,请调用 OptimizationOptions::mvp_features_only

将功能重置为 MVP 后,对 enable_feature 的额外调用将向 MVP 功能集添加功能。

自定义遍历

所有 Binaryen 优化过程都表示在 Pass 枚举中,并且可以通过 OptimizationOptions::add_pass 方法添加到 OptimizationOptions。这些优化过程在默认过程集合之后添加,默认情况下,大多数 OptimizationOptions 构造函数都启用了默认过程。默认过程可以通过 OptimizationOptions::new_opt_level_0 构造函数禁用,或者通过调用 OptimizationOptions::add_default_passes 并传入 false 参数来实现。

use wasm_opt::{OptimizationOptions, Pass};

let infile = "hello_world.wasm";
let outfile = "hello_world_optimized.wasm";

// Just run the inliner.
OptimizationOptions::new_opt_level_0()
    .add_pass(Pass::InliningOptimizing)
    .run(infile, outfile)?;

请注意,尽管这个crate公开了所有的Binaryen过程,但其中一些可能实际上并不适合使用——Binaryen是一个面向命令行的工具,其中一些过程是用于调试目的或直接打印到控制台。

与现有工具集成

为了方便与通过CLI使用 wasm-opt 的现有工具集成,这个crate提供了一个 integration 模块,它提供了一个与 stdCommand 兼容的API。这允许客户端代码使用与执行 wasm-opt CLI和基于crate的API相同的代码路径。

Cargo特性

默认启用,dwarf 特性启用与DWARF调试信息相关的过程。启用时,此crate包含来自LLVM项目的C++代码。当同时链接到LLVM时,这可能会引起重复符号链接错误。禁用时,此代码不会构建,因此可以成功链接到LLVM,但Binaryen DWARF过程将不会执行任何操作。

依赖关系

~2–11MB
~136K SLoC