(Meeting attendees, feel free to add items here!)
https://hackmd.io/f6-M4RdHTv-aeZXVPsALrA
TC: How do we want to approach the open items and concerns?
dyn for<'a> Trait<impl Trait>
(or even nested RPITs), only with binders, empty binders are fine, just to see how bad it is. if bad, stop capturing higher ranked lifetimes in RPIT, and start erroring on HRL in all other opaquesmust-define-before-use
Oli: must-define-before-use
is not a blocker now.
Oli: So the resolution to the concern is to build a list of the situations, e.g., in a HackMD, then we'll link to that in the issue to resolve the concern.
Oli: Changing this would be a breaking change, and it breaks things that are desirable to have work.
Oli; The new solver is more eager in registering inference variables, and we can't do method selection on inference variables.
Oli: We don't check unresolved obligations for trait bounds that could allow a method call to succeed. This is something that we could do. This would become more common under the new solver.
CE: Might want to file a separate concern for this.
Oli: I'll do that.
rust-analyzer
supporttmandry: I just filed a concern echoing Westley Wiser's concern about this, mostly just on his behalf.
CE: Is anyone on the RA side actually going to implement this? We shouldn't block on it otherwise.
tmandry: This does seem like a T-lang policy question.
Oli: If we want this kind of policy, we probably need funding for RA, because we're not going to get acceptable deadlines otherwise.
CE: This should be brought up in a T-lang meeting.
CE: When we did this for T-style, note that we didn't block stabilizations on implementation in rustfmt
, for this reason.
tmandry: We should indeed discuss this in the lang call next week.
TC: What surprised me is that I haven't seen RA previously make this request on other issues.
Oli: They could probably just avoid touching impl Trait
in general.
TC: Last I checked, RA doesn't support RPIT correctly either. It infers types incorrectly.
Oli: On that basis, we should probably just resolve that concern.
Oli: The best thing is if they just focus on ignoring it.
Projection
/NormalizesTo
goals for opaque typeshttps://github.com/rust-lang/rust/issues/105787#issuecomment-1750112388
Oli: The expectation here is that we'll land new trait solver coherence before we stabilize ATPIT.
Oli: This is already happening for projections, so this isn't making the situation worse.
CE: There's probably also a way to hack around this also in the old solver coherence.
Oli: We'll be rejecting, e.g.:
TC: Is this related to what alliemjay asked about related to the lifetime capture rules 2024?
Oli: Yes. He has a solution proposed for this, and we're working through it.
TC: Can we construct RPIT examples for this?
Oli: Yes, probably useless ones.
TC: So it's a breaking change, technically.
Oli: Yes, though we could carve out a corner case for this.
CE: Specifically, we need to reject "opaques nested in HRTB that capture those HR lifetimes".
Oli: Actually, we reject it whenever the lifetime is in scope.
TC: So this difference would only come up under the pre-Rust 2024 rules, since under the 2024 rules, we'd always capture the in-scope lifetime.
CE: I'm concerned about cases where there are two ATPIT… it's difficult to explain.
(The meeting ended here.)
Failed to normalize
async_fn_in_trait
ICE for indirect recursion of async trait method calls" #112047async_fn_in_trait
and return_type_notation
cause awkward awaits" #112569None.