これは、借用チェックをモデル化するコア ライブラリです。このブログ投稿とこの講演で説明されている分析を実装します。詳細はポローニアスの本に書かれています。
この名前は、シェイクスピアのハムレットの登場人物ポローニアスに由来する有名な引用「借り手でも貸し手でもありません」に由来しています。
このリポジトリの目的の 1 つは、同じアルゴリズムのさまざまな実装を実験して比較することです。 cargo run
使用して分析を実行でき、 -a
を使用して分析を選択できます。たとえば、拍手からの抽出例に対して実行するには、次のようにします。
> 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
これにより、関数ごとに 1 つのサブディレクトリを持つnll-facts
ディレクトリが生成されます。
> ls -F nll-facts
{{impl}}-maybe_next/ main/
その後、これらのディレクトリ上で実行できるようになります。