polonius
v0.13.0
这是一个模拟借用支票的核心库。它实现了这篇博文和本次演讲中描述的分析。详细信息参见 Polonius 的书。
这个名字来源于著名的名言“既不是借款人也不是贷款人”,这句话出自莎士比亚戏剧《哈姆雷特》中的角色波洛尼厄斯。
该存储库的目标之一是试验和比较同一算法的不同实现。您可以使用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
来获取朴素规则(更具可读性,速度更慢)——这些是博客文章中描述的确切规则。您还可以使用-a LocationInsensitive
来使用位置不敏感分析(速度更快,但可能会产生虚假错误)。
默认情况下, cargo run
仅打印时间。如果您还想查看结果,请尝试--show-tuples
(这将显示错误),也许还有-v
(以显示更多中间计算)。您可以提供--help
来获取更多文档。
要对输入运行借用检查器,您首先需要生成输入事实。为此,您需要使用-Znll-facts
选项运行 rustc:
> rustc -Znll-facts inputs/issue-47680/issue-47680.rs
或者,使用#![feature(nll)]
标志生成板条箱的输入事实:
> cargo rustc -- -Znll-facts
这将生成一个nll-facts
目录,每个函数有一个子目录:
> ls -F nll-facts
{{impl}}-maybe_next/ main/
然后您可以在这些目录上运行。