Proposal
The next-generation trait solver is getting close to stabilization. When we stabilized its use in coherence checking, we had to revert the stabilization as it surfaced new issues we didn't detect via the crater run:
This is deeply unpleasant. It would be a lot worse when stabilizing full -Znext-solver as updating our UI test suite will be an incredibly large diff. We currently have more than 700 UI tests for the new solver and changing trait solvers impacts a lot of diagnostics, so blessing affected tests is a pain.
It's also just useful for the Types Team to get additional confidence when stabilizing the solver that its design doesn't have unknown issues. For this, we would like to enable the new trait solver on nightly for a while purely for testing purposes. This feels slightly non-trivial to me.
Doing so should not require us to modify our UI tests. CI and local development should still use the old solver by default, only the nightly release build should enable -Znext-solver by default.
Given that the old solver will still be used on beta and stable, having worse test coverage for it on nightly makes it easier to introduce regressions. Because of this, we intend to block non-trivial changes to the old solver while the new one is enabled by default.
After finishing the behavior changes of our normalization rework rust-lang/rust#155345 we've now started another crater run and I'd like to actually enable the new solver by default during the next month. I intend to do this after an announcement blogpost and a call for testing. See the discussion on zulip :>
Mentors or Reviewers
If you have a reviewer or mentor in mind for this work, mention them here. You can put your own name here if you are planning to mentor the work.
Process
The main points of the [Major Change Process]MCP are as follows:
You can read [more about Major Change Proposals on forge]MCP.
Proposal
The next-generation trait solver is getting close to stabilization. When we stabilized its use in coherence checking, we had to revert the stabilization as it surfaced new issues we didn't detect via the crater run:
-Znext-solver=coherencerust#121848-Znext-solver=coherence" rust#130249-Znext-solver=coherenceagain rust#130654This is deeply unpleasant. It would be a lot worse when stabilizing full
-Znext-solveras updating our UI test suite will be an incredibly large diff. We currently have more than 700 UI tests for the new solver and changing trait solvers impacts a lot of diagnostics, so blessing affected tests is a pain.It's also just useful for the Types Team to get additional confidence when stabilizing the solver that its design doesn't have unknown issues. For this, we would like to enable the new trait solver on nightly for a while purely for testing purposes. This feels slightly non-trivial to me.
Doing so should not require us to modify our UI tests. CI and local development should still use the old solver by default, only the nightly release build should enable
-Znext-solverby default.Given that the old solver will still be used on beta and stable, having worse test coverage for it on nightly makes it easier to introduce regressions. Because of this, we intend to block non-trivial changes to the old solver while the new one is enabled by default.
After finishing the behavior changes of our normalization rework rust-lang/rust#155345 we've now started another crater run and I'd like to actually enable the new solver by default during the next month. I intend to do this after an announcement blogpost and a call for testing. See the discussion on zulip :>
Mentors or Reviewers
If you have a reviewer or mentor in mind for this work, mention them here. You can put your own name here if you are planning to mentor the work.
Process
The main points of the [Major Change Process]MCP are as follows:
@rustbot secondor kickoff a team FCP with@rfcbot fcp $RESOLUTION.You can read [more about Major Change Proposals on forge]MCP.