#source-file #removing #interpreting #try #valid #smaller #parts

app rust-reduce

rust-reduce 将尝试通过将源代码解释为有效的 Rust 代码并智能地删除代码部分来减小源代码文件。

1 个不稳定发布

0.1.0 2019年6月19日

#8 in #interpreting

AGPL-3.0

34KB
471 代码行(不包括注释)

rust-reduce

rust-reduce 将尝试通过将源代码解释为有效的 Rust 代码并智能地删除代码部分来减小源代码文件。在每次删除后,将运行给定的命令,但传递一个包含减小后代码的文件的路径。如果命令在原始输入上运行,则应返回 0,如果减小后的代码有趣,则返回非 0。

如果找到最小有趣减小版本,则原始文件将被覆盖。这发生在 rust-reduce 运行时。原始文件将使用 .orig 后缀进行备份。如果找到 rustfmt,则将使用它来清理输出。

使用 rust-reduce 的常见方法是编写一个简单的 shell 脚本,该脚本运行 rustc 并在编译器输出中 grep 特定的错误消息。请注意,您将需要查找特定的错误消息,因为虽然 rust-reduce 会生成语法正确的代码,但并不能保证它能编译。

原始文件可能引用了不同文件中的模块,这些模块将与主文件一起内联并减小。

C-reduce

本项目受到 C-reduce 的启发,应与 C-reduce 结合使用。

尽管 Rust 和 C 语法不同,但它们足够相似,以至于在 Rust 源代码上运行 C-reduce 可以非常有效!然而,C-reduce 仅适用于单个输入文件,而 Rust 有一个模块系统。 rust-reduce 可以在完整的 crate 上运行,并将生成单个减小后的输出文件。 rust-reduce 仅实现了几个旨在删除大块代码的减小过程,之后 C-reduce 可以接管减小。

当在同一个项目中使用 C-reduce 和 rust-reduce 时,请注意 rust-reduce 将更改测试命令的命令行,而 C-reduce 则不会。

过程

查看 src/transforms 以了解 rust-reduce 可以执行的类型减小。

示例

查看 tests/suite 以了解示例用法。

依赖项

~4–13MB
~155K SLoC