-
-
Notifications
You must be signed in to change notification settings - Fork 14.7k
[RFC] Refactor types to be a (TypeCore, Substs) pair #42340
Copy link
Copy link
Closed
Labels
C-cleanupCategory: PRs that clean code up or issues documenting cleanup.Category: PRs that clean code up or issues documenting cleanup.T-compilerRelevant to the compiler team, which will review and decide on the PR/issue.Relevant to the compiler team, which will review and decide on the PR/issue.
Metadata
Metadata
Assignees
Labels
C-cleanupCategory: PRs that clean code up or issues documenting cleanup.Category: PRs that clean code up or issues documenting cleanup.T-compilerRelevant to the compiler team, which will review and decide on the PR/issue.Relevant to the compiler team, which will review and decide on the PR/issue.
Type
Fields
Give feedbackNo fields configured for issues without a type.
Currently, the
Ty<'tcx>type is a reference to a struct (&TyS) that packages up a big ol' enumTypeVariants. As part of chalkification, we would like to be able to write more efficient "decision tree" like procedures that branch on this type. This would be made nicer by factoring out the type into two parts, a "core" and a "substs". This core would be roughly equivalent to the existingTypeVariants, but without the recursive references to other types, which would be uniformly packaged up in thesubsts.Thus I imagine that the
TySstruct would change to something like this:(Incidentally, this new notion of
TypeVariantscould maybe subsume the existingSimplifiedType, though that's not super important.)Steps
This transition is best made in steps:
TyTupleto use a substsClosureSubststype used inTyClosureand make it into a normal substsGeneratorSubsts]Unknowns
It's not 100% clear that this is a good plan, though the individual refactorings above all seem like good steps regardless. Some complicating factors:
TyFnPtrembodies aPolyFnSig, which carries a binder.cc @eddyb, who first suggested this to me
cc @tschottdorf, who implemented #42297, a step along this path (and an important step for ATC regardless)