1 个不稳定发布
0.1.0 | 2019年6月19日 |
---|
#8 in #interpreting
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