GitXplorerGitXplorer
r

polonius

public
1382 stars
73 forks
41 issues

Commits

List of commits on branch master.
Unverified
22ba020ce2b5e0ec6106523a4414e808e826aec1

use lowercase `.md` extension

ddomenicquirl committed 3 years ago
Unverified
78c29caa4bcf3c1609bb59b6bf0fd6bf3eda35eb

use full relation names for `T!`

ddomenicquirl committed 3 years ago
Unverified
2fd73a300e785e0abbb7cb5bd2006cc7556b7313

add README for parser with extension example

ddomenicquirl committed 3 years ago
Unverified
002a07be1a60dddd9de9aa317d074125f09aa862

factor out parameter parsing

ddomenicquirl committed 3 years ago
Unverified
8a59678807a2e1ba8fe10f2ae9e22d1430d4eb7a

add rustdoc documentation

ddomenicquirl committed 3 years ago
Unverified
c05239f0c4cc64e570c2b439b6f899e77f5f4f2e

minor cleanups

ddomenicquirl committed 3 years ago

README

The README file for this repository.

This is a core library that models the borrow check. It implements the analysis described in this blogpost and in this talk. Details are in the Polonius book.

Why the name "Polonius"?

The name comes from the famous quote "Neither a borrower nor a lender be", which comes from the character Polonius in Shakespeare's Hamlet.

Want to run the code?

One of the goals with this repo is to experiment and compare different implementations of the same algorithm. You can run the analysis by using cargo run and you can choose the analysis with -a. So for example to run against an example extract from clap, you might do:

> 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

You could also try -a Naive to get the naive rules (more readable, slower) -- these are the exact rules described in the blogpost. You can also use -a LocationInsensitive to use a location insensitive analysis (faster, but may yield spurious errors).

By default, cargo run just prints timing. If you also want to see the results, try --show-tuples (which will show errors) and maybe -v (to show more intermediate computations). You can supply --help to get more docs.

How to generate your own inputs

To run the borrow checker on an input, you first need to generate the input facts. For that, you will need to run rustc with the -Znll-facts option:

> rustc -Znll-facts inputs/issue-47680/issue-47680.rs

Or, for generating the input facts of a crate using the #![feature(nll)] flag:

> cargo rustc -- -Znll-facts

This will generate a nll-facts directory with one subdirectory per function:

> ls -F nll-facts
{{impl}}-maybe_next/  main/

You can then run on these directories.