Loading...
Polonius Roadmap
Roadmap
Extending Polonius to cover the full semantics
Integrating liveness
polonius#104
Extend analysis to compute use-live and drop-live variables at each point
Extend rustc to emit use, drop, and def facts for variables
Extend rustc to emit types of variables, or at least regions that appear in those types
Combine to compute which regions are live at which point
Land changes to
polonius
Land changes to
rustc
Extend drop-live analysis to consider initialization
Integrating move / overwrite analysis
(
a
la Lark
)
Describe desired rules
Generate required facts and implement rules to generate errors in polonius
Report move errors from rustc
Handling higher-ranked things
(intersects
universes and traits group)
see also
this blog post
and
this conversation on zulip
currently
on hold
Integrating outlives relations
(
blogpost
)
Validating correctness
rustc tests: lqd has started an
analysis
of rustc’s test suite behaviour under
`-Zpolonius`
Cover Polonius’ behaviour in a lot more tests, in both polonius and rustc repos
Experimental, more precise variant of polonius that doesn’t track subset relations
(
discussion
thread
,
polonius issue
with more details
)
Benchmarking suite
Instrument rustc to dump timing measurements + tuple counts for each fn in a crate
Run instrumented rustc over crates from
https://perf.rust-lang.org/
and perhaps other sources
Assemble data into a spreadsheet and attempt to select outlier functions
Extract data from them and store into polonius repository to form a benchmarking suite
Bonus: modify travis setup to do measurements =)
Rustc Performance
Identify outliers in performance + memory usage
Examine outliers to characterize why they are slow
Identify
"common
case" overhead and some representative tests
Try to figure out why
that
is slow
Extract the facts and do isolated testing of Polonius
Explore the
‘location
insensitive first’ variant
Initially, just use a filter for whether to try the more complex variants
Later, can we use the more complex variants to
Documentation
What design document do we want and when?
Videos and things to try and explain
Introduction to Polonius
(sort
of done, Niko has to post)
More complex examples, like the dreaded
#47680
.
Walk through a simple example and connect it to the code
here is where we compute this relation
here is how data is transferred between rustc
here is how the datafrog code works
How datafrog-opt works and how it relates to the naive check
2019.03.21
Tasks:
Please turn on JavaScript to use Paper in all of its awesomeness. ^_^
Roadmap
Extending Polonius to cover the full semantics
Benchmarking suite
Rustc Performance
Documentation
2019.03.21