Это базовая библиотека, моделирующая проверку заимствования. Он реализует анализ, описанный в этом блоге и в этом докладе. Подробности — в книге Полония.
Название происходит от знаменитой цитаты «Ни заемщиком, ни кредитором», которая происходит от персонажа Полония в шекспировском «Гамлете ».
Одна из целей этого репозитория — экспериментировать и сравнивать различные реализации одного и того же алгоритма. Вы можете запустить анализ с помощью 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
чтобы получить больше документов.
Чтобы запустить проверку заимствований на входных данных, сначала необходимо сгенерировать входные факты. Для этого вам нужно запустить Rusc с опцией -Znll-facts
:
> 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/
Затем вы можете запускать эти каталоги.