Today is our weekly sync meeting. In advance, I wanted to leave some notes on my progress and suggest a possible course of action.
First off, as you may have seen, last week I wrote a new blog post explaining my analysis.
The new analysis is implemented on my nll-alias-analysis branch, however it is not ready to land. First off, it’s quite slow – the impl is naive. I am confident we can improve the perf dramatically, but it’s not entirely trivial to do so.
Even if the perf were great, however, there are also some obstacles around integrating the differential-dataflow crate that I am currently using. For one thing, it depends on libgetopt, which causes problems for…reasons. We added a feature flag to sidestep this but need a new release and @frankmcsherry hasn’t gotten around to it yet (which is fine). There are other problems too: it uses procedural macros for custom derive, and we can’t incorporate those into the stage1 builds yet (we might be able to sidestep this too, I’ve not yet tried).
In any case, I had an alternative thought. Maybe I should just land a -Znll-facts switch that dumps the base facts out into a set of files (in fact, I already have this switch). Then I can extract the solving code into a rust-lang-nursery repo that loads from those files. This would effectively be the “canonical” borrow checker implementation. Then we can tinker with an optimized variant there, independent from the compiler, which should allow for faster iteration. Eventually we might be able to extract a subcrate usable by the compiler. This is roughly the chalk model.
Thoughts?