rust-lang / types-team

Home of the "types team", affiliated with the compiler and lang teams.
https://rust-lang.github.io/types-team/
Apache License 2.0
96 stars 19 forks source link

rustc trait system rewrite initiative #58

Closed lcnr closed 2 years ago

lcnr commented 2 years ago

Proposal

Start an initiative with the goal of replacing the current trait system implementation of rustc. This new implementation should fully replace both fulfill and evaluate and offer an API a lot closer to the ideal of chalk/a-mir-formality.

Goals of this initiative

[^1]: currently different FnCtxt and ObligationCtxt do not share a cache for fulfill and also don't share it with mir borrowck.

Explicit non-goals of this initiative

This initiative does not intend to implement any major changes to the trait system as part of the replacement. The new replacement should closely mirror the old system at the time of replacement to minimize the risk of backwards compatibility issues.

We also do not intend to extract any shared code with rust-analyzer as part of this initiative. While that will be easier after this work has been completed, the sole focus of this initiative is to replace the existing solvers with a solver which results in the advantages noted above.

Outline of the planned work

Start by clearly laying out how the compiler uses the existing trait solvers and what API has to be provided by the new solver.

Any parts strongly tied to the architecture of the current solvers have to be rewritten where possible. The biggest challenge will be trait diagnostics, which should be rewritten to be as solver agnostic as possible. Instead of relying on solver internals, diagnostics should lazily recompute necessary information where possible. This may require a reimplementation of our trait diagnostics to replace the existing one.

Once this is done, work on a new solver directly in rustc to replace both evaluate and fulfill. When that solver is ready, replace all uses of evaluate and fulfill with the new solver and remove evaluate and fulfill. At that point this initiative can be closed again.

For more information, see this document

Initial members

@lcnr as lead, other Types Team members depending on interest.

Comments

This issue is not meant to be used for technical discussion. There is a Zulip stream for that. Use this issue to leave procedural comments, such as volunteering to review or raising a concern that you would like to be addressed.

rustbot commented 2 years ago

This issue is not meant to be used for technical discussion. There is a Zulip stream for that. Use this issue to leave procedural comments, such as volunteering to review, indicating that you second the proposal (or third, etc), or raising a concern that you would like to be addressed.

cc @rust-lang/types

lcnr commented 2 years ago

@rfcbot fcp merge

lcnr commented 2 years ago

@rfcbot ping

lcnr commented 2 years ago

@rfcbot fcp merge

lcnr commented 2 years ago

rfcbot needs explicit labels and otherwise just silently fails apparently?

@rfcbot fcp merge

lcnr commented 2 years ago

tragic, maybe with a final-comment-period and disposition-merge label as well

@rfcbot fcp merge

lcnr commented 2 years ago

proposed-final-comment-period :(

@rfcbot fcp merge

lcnr commented 2 years ago

@rfcbot poll test

lcnr commented 2 years ago

@rfcbot poll types test

rfcbot commented 2 years ago

Team member @lcnr has proposed to merge this. The next step is review by the rest of the tagged team members:

No concerns currently listed.

Once a majority of reviewers approve (and at most 2 approvals are outstanding), this will enter its final comment period. If you spot a major issue that hasn't been raised at any point in this process, please speak up!

See this document for info about what commands tagged team members can give me.

rfcbot commented 2 years ago

Team member @lcnr has asked teams: T-types, for consensus on:

test

rfcbot commented 2 years ago

Team member @lcnr has asked teams: T-types, for consensus on:

test

compiler-errors commented 2 years ago

other Types Team members depending on interest.

You already know that I'm interested :smiley:

spastorino commented 2 years ago

other Types Team members depending on interest.

I'm interested too :)

cjgillot commented 2 years ago

other Types Team members depending on interest.

Do you accept out of types team also? I'd be interested.

jackh726 commented 2 years ago

other Types Team members depending on interest.

Do you accept out of types team also? I'd be interested.

Of course :)

BoxyUwU commented 2 years ago

I'd also be interested in helping with this

nikomatsakis commented 2 years ago

@rfcbot reviewed

vincenzopalazzo commented 2 years ago

Looks like to have my interest too :)

rfcbot commented 2 years ago

:bell: This is now entering its final comment period, as per the review above. :bell:

psst @lcnr, I wasn't able to add the final-comment-period label, please do so.

rfcbot commented 2 years ago

The final comment period, with a disposition to merge, as per the review above, is now complete.

As the automated representative of the governance process, I would like to thank the author for their work and everyone else who contributed.

This will be merged soon.

psst @lcnr, I wasn't able to add the finished-final-comment-period label, please do so.

jackh726 commented 2 years ago

Closing as accepted 🙂