Esta é uma biblioteca central que modela o cheque de empréstimo. Ele implementa a análise descrita nesta postagem do blog e nesta palestra. Os detalhes estão no livro Polônio.
O nome vem da famosa citação "Nem devedor nem credor", que vem do personagem Polônio em Hamlet de Shakespeare.
Um dos objetivos deste repositório é experimentar e comparar diferentes implementações do mesmo algoritmo. Você pode executar a análise usando cargo run
e escolher a análise com -a
. Então, por exemplo, para executar um extrato de exemplo do clap, você pode fazer:
> 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
Você também pode tentar -a Naive
para obter as regras ingênuas (mais legíveis, mais lentas) - essas são as regras exatas descritas na postagem do blog. Você também pode usar -a LocationInsensitive
para usar uma análise insensível à localização (mais rápida, mas pode gerar erros espúrios).
Por padrão, cargo run
apenas imprime o tempo. Se você também quiser ver os resultados, tente --show-tuples
(que mostrará erros) e talvez -v
(para mostrar cálculos mais intermediários). Você pode fornecer --help
para obter mais documentos.
Para executar o verificador de empréstimo em uma entrada, primeiro você precisa gerar os fatos de entrada. Para isso, você precisará executar o Rustc com a opção -Znll-facts
:
> rustc -Znll-facts inputs/issue-47680/issue-47680.rs
Ou, para gerar os fatos de entrada de uma caixa usando o sinalizador #![feature(nll)]
:
> cargo rustc -- -Znll-facts
Isso irá gerar um diretório nll-facts
com um subdiretório por função:
> ls -F nll-facts
{{impl}}-maybe_next/ main/
Você pode então executar nesses diretórios.