Dies ist eine Kernbibliothek, die die Ausleihprüfung modelliert. Es setzt die in diesem Blogpost und in diesem Vortrag beschriebene Analyse um. Einzelheiten finden Sie im Polonius-Buch.
Der Name geht auf das berühmte Zitat „Weder ein Kreditnehmer noch ein Kreditgeber“ zurück, das von der Figur Polonius in Shakespeares Hamlet stammt.
Eines der Ziele dieses Repos besteht darin, verschiedene Implementierungen desselben Algorithmus zu experimentieren und zu vergleichen. Sie können die Analyse mit cargo run
ausführen und die Analyse mit -a
auswählen. Um beispielsweise einen Beispielauszug aus Clap zu testen, könnten Sie Folgendes tun:
> 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
Sie können auch -a Naive
ausprobieren, um die naiven Regeln zu erhalten (lesbarer, langsamer) – das sind genau die Regeln, die im Blogbeitrag beschrieben werden. Sie können auch -a LocationInsensitive
verwenden, um eine standortunabhängige Analyse zu verwenden (schneller, kann aber zu falschen Fehlern führen).
Standardmäßig gibt cargo run
nur das Timing aus. Wenn Sie auch die Ergebnisse sehen möchten, versuchen Sie es mit --show-tuples
(das Fehler anzeigt) und vielleicht mit -v
(um weitere Zwischenberechnungen anzuzeigen). Sie können --help
angeben, um weitere Dokumente zu erhalten.
Um den Borrow-Checker für eine Eingabe auszuführen, müssen Sie zunächst die Eingabefakten generieren. Dazu müssen Sie rustc mit der Option -Znll-facts
ausführen:
> rustc -Znll-facts inputs/issue-47680/issue-47680.rs
Oder zum Generieren der Eingabefakten einer Kiste mit dem Flag #![feature(nll)]
:
> cargo rustc -- -Znll-facts
Dadurch wird ein nll-facts
Verzeichnis mit einem Unterverzeichnis pro Funktion generiert:
> ls -F nll-facts
{{impl}}-maybe_next/ main/
Sie können dann auf diesen Verzeichnissen laufen.