-
Notifications
You must be signed in to change notification settings - Fork 70
Open
Description
Metadata | |
---|---|
Point of contact | @lqd |
Team(s) | types |
Goal document | 2025h1/Polonius |
Summary
Keep working on implementing a native rustc version of the Polonius next generation borrow checking algorithm, that would scale better than the previous datalog implementation, continuing from the 2024h2 goal.
Tasks and status
- Design review (@nikomatsakis)Factoring out higher-ranked concerns from the main path (@amandasystems)
- rewrite invalid universe constraints with outlives
'static
constraints — PR #123720 - completely remove placeholders — in progress, PR #130227
To pick up a draggable item, press the space bar. While dragging, use the arrow keys to move the item. Press space again to drop the item in its new position, or press escape to cancel.Replace parts of the borrow checker with location-insensitive PoloniusLocation-sensitive prototype on nightly (@lqd)- create structures for location-dependent outlives constraints
- build new constraint graph from typeck constraints and liveness constraints
- update NLLs for required changes to local & region liveness, loan liveness & loan scopes, (possibly unreachable) kills, bidirectional traversal & active loans
To pick up a draggable item, press the space bar. While dragging, use the arrow keys to move the item. Press space again to drop the item in its new position, or press escape to cancel.Tests and validation of location-sensitive Polonius (@lqd) — in progress- limit regressions about diagnostics when using the new constraints on diagnostics tailored to the old constraints — PR #136299
- make the full test suite pass — in progress
- do a crater run for assertions and backwards-compatibility
- expand test suite with tests about the new capabilities
To pick up a draggable item, press the space bar. While dragging, use the arrow keys to move the item. Press space again to drop the item in its new position, or press escape to cancel.Location-sensitive pass on nightly, tested on CI (@lqd)To pick up a draggable item, press the space bar. While dragging, use the arrow keys to move the item. Press space again to drop the item in its new position, or press escape to cancel.
Metadata
Metadata
Assignees
Labels
Type
Projects
Relationships
Development
Select code repository
Activity
lqd commentedon Jul 23, 2024
nikomatsakis commentedon Jul 25, 2024
This issue is intended for status updates only.
For general questions or comments, please contact the owner(s) directly.
lqd commentedon Sep 1, 2024
Status update:
we've completed the first task of removing universe errors out of the main path and moving higher-ranked concerns out of the borrowck, in @amandasystems' PR #123720. During SCC construction, we now detect these constraints and rewrite them to regular constraints outliving
'static
. We have possible improvements in mind that we can do in the future here, but we've also just started trying to remove placeholders, by replacing them with constraints again.we've also made more progress on the location-sensitive analysis, though not as much as we'd like. By now we have a "localized" constraint graph to implement propagation in a flow-sensitive manner, with constraints from typeck and liveness, and have it hooked it up to the existing borrow checking in non-lexical scope and active loans computation. It's still buggy though: there are a couple hundred of UI test failures at the moment, including important cases that don't work yet. Some of these failures are due to the diagnostics subsystem not yet handling flow-sensitive concerns. The next immediate steps are to analyze and fix the test failures, and to help with this we're also expanding the existing NLL logging, MIR dumps, and visualizations.
and we've also started work on the item to use more of the polonius model in the borrow-checker, though we're still in the preparation phase to have an overview of what we want, need, and can change here. Currently, the gated location-insensitive analysis is mainly implemented in the borrowck dataflow analyses, but we want to expand this to replace code and data existing in both models, avoid duplicate work, and simplify the implementation. For example, we can either change components internals to do so, or have them generic enough to work with both models: this applies at least to region liveness, region values, SCC values, etc. We also want to do this unification while taking the location-sensitive requirements into account, as well as constraints that existing downstream code can't be impacted or changed too much for now (e.g. diagnostics).
lqd commentedon Oct 14, 2024
Key developments:
lqd commentedon Nov 15, 2024
Key developments, with good progress:
lqd commentedon Dec 31, 2024
Here are the key developments for the last update of the year:
devilishly marketed ashoped to be a straightforward refactor turned out to have a lot of hidden complexity(Happy Holidays and Happy New Year everyone!)
lqd commentedon Jan 31, 2025
Key developments from this month:
a-mir-formality
nikomatsakis commentedon Feb 18, 2025
This is a continuing project goal, and the updates below this comment will be for the new period 2025h1
4 remaining items