The Rust project is currently working towards a slate of 5 project goals, with 3 of them designated as Flagship Goals. This post provides selected updates on our progress towards these goals (or, in some cases, lack thereof). The full details for any particular goal are available in its associated tracking issue on the rust-project-goals repository.
Flagship goals
"Unblocking dormant traits"
| Progress | |
| Point of contact | |
| Champions | |
| Task owners | Taylor Cramer, Taylor Cramer & others |
No detailed updates available.
| Progress | |
| Point of contact | |
| Champions | |
| Task owners |
1 detailed update available.
Since the last update we've fixed the hang in rayon in https://github.com/rust-lang/rust/pull/144991 and https://github.com/rust-lang/rust/pull/144732 which relied on https://github.com/rust-lang/rust/pull/143054 https://github.com/rust-lang/rust/pull/144955 https://github.com/rust-lang/rust/pull/144405 https://github.com/rust-lang/rust/pull/145706. This introduced some search graph bugs which we fixed in https://github.com/rust-lang/rust/pull/147061 https://github.com/rust-lang/rust/pull/147266.
We're mostly done with the opaque type support now. Doing so required a lot of quite involved changes:
- https://github.com/rust-lang/rust/pull/145244 non-defining uses in borrowck
- https://github.com/rust-lang/rust/pull/145925 non-defining uses in borrowck closure support
- https://github.com/rust-lang/rust/pull/145711 non-defining uses in hir typeck
- https://github.com/rust-lang/rust/pull/140375 eagerly compute sub_unification_table again
- https://github.com/rust-lang/rust/pull/146329 item bounds
- https://github.com/rust-lang/rust/pull/145993 function calls
- https://github.com/rust-lang/rust/pull/146885 method selection
- https://github.com/rust-lang/rust/pull/147249 fallback
We also fixed some additional self-contained issues and perf improvements: https://github.com/rust-lang/rust/pull/146725 https://github.com/rust-lang/rust/pull/147138 https://github.com/rust-lang/rust/pull/147152 https://github.com/rust-lang/rust/pull/145713 https://github.com/rust-lang/rust/pull/145951
We have also migrated rust-analyzer to entirely use the new solver instead of chalk. This required a large effort mainly by Jack Huey Chayim Refael Friedman and Shoyu Vanilla. That's some really impressive work on their end 🎉 See this list of merged PRs for an overview of what this required on the r-a side. Chayim Refael Friedman also landed some changes to the trait solver itself to simplify the integration: https://github.com/rust-lang/rust/pull/145377 https://github.com/rust-lang/rust/pull/146111 https://github.com/rust-lang/rust/pull/147723 https://github.com/rust-lang/rust/pull/146182.
We're still tracking the remaining issues in https://github.com/orgs/rust-lang/projects/61/views/1. Most of these issues are comparatively simple and I expect us to fix most of them over the next few months, getting us close to stabilization. We're currently doing another crater triage which may surface a few more issues.
| Progress | |
| Point of contact | |
| Champions | |
| Task owners |
1 detailed update available.
Here's another summary of the most interesting developments since the last update:
- reviews and updates have been done on the polonius alpha, and it has since landed
- the last 2 trivial diagnostics failures were fixed
- we've done perf runs, crater runs, completed gathering stats on crates.io for avg and outliers in CFG sizes, locals, loan and region counts, dataflow framework behavior on unexpected graph shapes and bitset invalidations
- I worked on dataflow for borrowck: single pass analyses on acyclic CFGs, dataflow analyses on SCCs for cyclic CFGs
- some more pieces of amanda's SCC rework have landed, with lcnr's help
- lcnr's opaque type rework, borrowcking of nested items, and so on, also fixed some issues we mentioned in previous updates with member constraints for computing when loans are going out of scope
- we also studied recent papers in flow-sensitive pointer analysis
- I also started the loans-in-scope algorithm rework, and also have reachability acceleration with the CFG SCCs
- the last 2 actual failures in the UI tests are soundness issues, related to liveness of captured regions for opaque types: some regions that should be live are not, which were done to help with precise capture and limit the impact of capturing unused regions that cannot be actually used in the hidden type. The unsoundness should not be observable with NLLs, but polonius alpha relies on liveness to propagate loans throughout the CFG: these dead regions prevent detecting some error-causing loan invalidations. The easiest fix would cause breakage in code that's now accepted. niko, jack and I have another possible solution and I'm trying to implement it now
Goals looking for help
Other goal updates
| Progress | |
| Point of contact | |
| Champions | |
| Task owners |