Esta es una biblioteca central que modela el cheque de préstamo. Implementa el análisis descrito en esta entrada de blog y en esta charla. Los detalles están en el libro de Polonio.
El nombre proviene de la famosa cita "Ni un prestatario ni un prestamista", que proviene del personaje Polonio en Hamlet de Shakespeare.
Uno de los objetivos de este repositorio es experimentar y comparar diferentes implementaciones del mismo algoritmo. Puede ejecutar el análisis utilizando cargo run
y puede elegir el análisis con -a
. Entonces, por ejemplo, para ejecutar un extracto de ejemplo de clap, podrías hacer:
> 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
También puedes probar -a Naive
para obtener las reglas ingenuas (más legibles, más lentas); estas son las reglas exactas descritas en la publicación del blog. También puede utilizar -a LocationInsensitive
para utilizar un análisis que no tenga en cuenta la ubicación (más rápido, pero puede generar errores falsos).
De forma predeterminada, cargo run
solo imprime el tiempo. Si también desea ver los resultados, intente con --show-tuples
(que mostrará errores) y tal vez -v
(para mostrar más cálculos intermedios). Puede proporcionar --help
para obtener más documentos.
Para ejecutar el verificador de préstamos en una entrada, primero debe generar los datos de entrada. Para eso, necesitarás ejecutar Rustc con la opción -Znll-facts
:
> rustc -Znll-facts inputs/issue-47680/issue-47680.rs
O, para generar los datos de entrada de una caja usando el indicador #![feature(nll)]
:
> cargo rustc -- -Znll-facts
Esto generará un directorio nll-facts
con un subdirectorio por función:
> ls -F nll-facts
{{impl}}-maybe_next/ main/
Luego puede ejecutar en estos directorios.