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/
然後您可以在這些目錄上運行。