3 个版本 (破坏性更新)
0.3.0 | 2018年12月4日 |
---|---|
0.2.0 | 2018年5月31日 |
0.1.0 | 2018年5月24日 |
#803 in 开发工具
4MB
3K SLoC
这是一个核心库,用于对借用检查进行建模。它实现了在这篇博客文章中描述的分析。
为什么叫“Polonius”呢?
这个名字来自莎士比亚的《哈姆雷特》中波洛尼厄斯角色的著名台词 "Neither borrower nor lender be"。
想要运行代码吗?
这个存储库的目标之一是实验和比较相同算法的不同实现。您可以使用 cargo run
运行分析,您可以使用 -a
选择分析。例如,要运行对 clap 的示例提取的分析,您可能会这样做
> cargo +nightly run --release -- -a DatafrogOpt inputs/clap-rs/app-parser-{{impl}}-add_defaults/
Finished release [optimized] target(s) in 0.05 secs
Running `target/release/borrow-check 'inputs/clap-rs/app-parser-{{impl}}-add_defaults/'`
--------------------------------------------------
Directory: inputs/clap-rs/app-parser-{{impl}}-add_defaults/
Time: 3.856s
您还可以尝试 -a Naive
来获取原始规则(更易读,但较慢)——这些规则与 博客文章 中描述的规则完全一致。您还可以使用 -
来使用不区分位置的检查(更快,但可能产生虚假错误)。
默认情况下,cargo run
仅打印时间。如果您还想查看结果,请尝试 --show-tuples
(将显示错误)和 -
(以显示更多中间计算)。您可以通过提供 --help
获取更多文档。
如何生成自己的输入
要在输入上运行借用检查器,您首先需要生成输入事实。为此,您需要使用 rustc 的 --facts
选项运行
> rustc -Znll-facts inputs/issue-47680/issue-47680.rs
或者,使用 #![feature(nll)]
标志来生成 crate 的输入事实
> cargo rustc -- -Znll-facts
这将生成一个包含每个函数一个子目录的 nll-facts
目录
> ls -F nll-facts
{{impl}}-maybe_next/ main/
然后您可以在这些目录上运行
依赖项
约 6–15MB
约 192K SLoC