Expand description
The next-generation trait solver, currently still WIP.
As a user of rust, you can use -Znext-solver to enable the new trait solver.
As a developer of rustc, you shouldn’t be using the new trait
solver without asking the trait-system-refactor-initiative, but it can
be enabled with InferCtxtBuilder::with_next_trait_solver. This will
ensure that trait solving using that inference context will be routed
to the new trait solver.
For a high-level overview of how this solver works, check out the relevant section of the rustc-dev-guide.
Modules§
- alias_
relate 🔒 - Implements the
AliasRelategoal, which is used when unifying aliases. Doing this via a separate goal is called “deferred alias relation” and part of our more general approach to “lazy normalization”. - assembly 🔒
- Code shared by trait and projection goals for candidate assembly.
- effect_
goals 🔒 - Dealing with host effect goals, i.e. enforcing the constness in
T: const TraitorT: [const] Trait. - eval_
ctxt 🔒 - inspect
- normalizes_
to 🔒 - project_
goals 🔒 - search_
graph 🔒 - trait_
goals 🔒 - Dealing with trait goals, i.e.
T: Trait<'a, U>.
Structs§
- Accessed
Opaques - Eval
Ctxt - External
Constraints Data - Additional constraints returned on success.
- Goal
- A goal is a statement, i.e.
predicate, we want to prove given some assumptions, i.e.param_env. - Goal
Evaluation - The result of evaluating a goal.
- Goal
Stalled On - The conditions that must change for a goal to warrant
- Maybe
Info - Nested
Normalization Goals - NoSolution
- Query
Input - Rerun
NonErased - A bit like
NoSolution, but for functions that normally cannot fail unless they accessed opaues. (SeeTypingMode::ErasedNotCoherence). GettingOpaquesAccesseddoesn’t mean there truly is no solution. It just means that we want to bail out of the current query as fast as possible, possibly by returningNoSolutionif that’s fastest. This is okay because when you getOpaquesAccessedwe’re guaranteed that we’re going to retry this query in the original typing mode to get the correct answer. - Response
Enums§
- AdtDestructor
Kind - Indicates that a
impl Drop for Adtisconstor not. - Alias
Bound Kind - Builtin
Impl Source - Candidate
Preference Mode - Which trait candidates should be preferred over other candidates? By default, prefer where bounds over alias bounds. For marker traits, prefer alias bounds over where bounds.
- Candidate
Source - Possible ways the given goal can be proven.
- Certainty
- External
Region Constraints - Fetch
Eligible Assoc Item Response - Generate
Proof Tree - Goal
Source - Why a specific goal has to be proven.
- HasChanged
- Whether evaluating this goal ended up changing the inference state.
- Maybe
Cause - Why we failed to evaluate a goal.
- Merge
Candidate 🔒Info - NoSolution
OrRerun NonErased - Opaque
Types Jank - Supporting not-yet-defined opaque types in HIR typeck is somewhat challenging. Ideally we’d normalize them to a new inference variable and just defer type inference which relies on the opaque until we’ve constrained the hidden type.
- Param
EnvSource - Rerun
Condition - Information about how we accessed opaque types This is what the trait solver does when each states is encountered:
- Rerun
Reason - Mainly for debugging, to keep track of the source of the rerunning
in
TypingMode::ErasedNotCoherence. - Sized
Trait Kind - Which sizedness trait -
Sized,MetaSized?PointeeSizedis omitted as it is removed during lowering. - Small
Copy List - Stalled
OnCoroutines - Visible
ForLeak Check - Whether the given region constraint should be considered/ignored for
leak check. In most part of the compiler, this should be
Yes, except for applying constraints from the nested goals in next-solver.Unreachableis used in places in which leak check isn’t done, e.g. borrowck.
Constants§
- FIXPOINT_
STEP_ 🔒LIMIT - How many fixpoint iterations we should attempt inside of the solver before bailing with overflow.
Traits§
Functions§
- evaluate_
root_ goal_ for_ proof_ tree_ raw_ provider - Do not call this directly, use the
tcxquery instead. - has_
no_ 🔒inference_ or_ external_ constraints - has_
only_ 🔒region_ constraints
Type Aliases§
- Canonical
Input - Canonical
Response - Query
Result - The result of evaluating a canonical query.
- Query
Result OrRerun NonErased