--- title: Planning meeting 2025-03-05 tags: ["T-lang", "planning-meeting", "minutes"] date: 2025-03-05 discussion: https://rust-lang.zulipchat.com/#narrow/channel/410673-t-lang.2Fmeetings/topic/Planning.20meeting.202025-03-05 url: https://hackmd.io/sIZpAPg5RbSHBT5OXxg-JA --- # T-lang planning meeting agenda - Meeting date: 2025-03-05 ## Attendance - People: Josh, TC, Niko, Scott, Tyler, Taylor, eholk, Yosh, Martin (martinomburajr) ## Meeting roles - Minutes, driver: TC ## Calendar - 2025-03-12 - 2025-03-19 - 2025-03-26 -- scottmcm maybe out - 2025-04-02 -- nikomatsakis out, tmandry unsure - 2025-04-09 -- yosh out - 2025-04-16 -- yosh out, scottmcm maybe out - 2025-04-23 -- nikomatsakis out - 2025-04-30 ## Meeting schedule proposal | Date | Meeting | Doc owner | | --- | ------- | --------- | 2025-03-12 | "Champions v3" [#314](https://github.com/rust-lang/lang-team/issues/314) | nikomatsakis | | 2025-03-19 | `Freeze` in bounds | TC | | 2025-03-26 | Stabilization summation | TC | | 2025-04-02 | Deep dives / extended triage | TC | | 2025-04-09 | Deep dives / extended triage | TC | | 2025-04-16 | Deep dives / extended triage | TC | | 2025-04-23 | Interop 2 | tmandry | | 2025-04-30 | "Marker effects" (const generics, simd multiversioning) | nikomatsakis | Candidates / short list: * "Design meeting: SIMD multiversioning" [#309](https://github.com/rust-lang/lang-team/issues/309) * Interop 2 * Freeze in bounds All hands topics * Async fn in dyn Trait * Match ergonomics ## Priorities? ### Project goals NM: Project goals: reviewing the [in-progress project board](https://github.com/orgs/rust-lang/projects/63/views/1)... * Unsafe fields :heavy_check_mark: * did this * SVE/SME on AArch64 :heavy_check_mark: * two parts * `?Sized` design * discussed how to manage approvals etc * lang to approve the `Sized` hierarchy RFC * blocked on const trait impls * lang to be on the RFC that adds the feature * stabilization: * stabilize the hierarchy together with examples that DO use it * and we would want to be on that * tmandry: I am skeptical of the compiler complexity given that this is a value that cannot be spilled to the stack * scottmcm: MIR has wanted to get rid of unsized locals for a long time...makes me very scared... * Research: extern linking :heavy_check_mark: -- exploration phase * Null and enum discriminant checks :heavy_check_mark: * Ergonomic SIMD multiversioning * "Design meeting: SIMD multiversioning" [#309](https://github.com/rust-lang/lang-team/issues/309) * tmandry: related to effects and marker effects * Improve state machine codegen -- exploration/experimentation phase * needs some guidance around what we consider in the "realm of possibility" for syntax * nikomatsakis would like to see a number of crates showing that the pattern scales to more stuff * joshtriplett: can this be done completely in the optimizer? * tmandry: concept that's being proposed, I don't hate it, I don't love it, I would accept it if we had evidence of the benefits * TC -- probably need scottmcm's input here, I think he had stronger feelings * Implement restrictions, prepare for stabilization * Externally impl items * still in exploration phase * Evaluate approaches for seamless interop with C++ and Rust * more scheduled * Declarative macro improvements * had a request here * RFC #3697 * tmandry: I'd like there to be concrete use cases that this RFC is sufficient for * josh: Those are listed in the RFC (for both RFCs). * RFC #3698 -- * Stabilize RFL tooling * Expose experimental LLVM features for GPU offloading * work-is-being-done * Ergonomic ref-counting * open PR, niko plans to review * Const trait for stabilization * Async Rust experience * RTN -- * stabilization report is in progress * not supported in rust-analyzer nor rustfmt? * unsafe binders * impl has landed * a report might be useful * experimentation is also needed * implementable trait aliases * would be useful for libs, creates possibility of stable migrations without breaking compatibility * also: implementing a supertrait through a subtrait * also: inherent trait items * also: supertrait item * also: feature-gated impls (TC: comes up so often, it's so baked into the process ("insta-stable") that you don't even notice it) * worth discussing but who would prepare the doc? * cramertj: We should chat in more detail-- the idea of implementing trait aliases implies that trait aliases are sort of a different feature than the thing they are today (see concerns RE "trait alias" vs "bounds alias" vs "constraint alias" in the tracking issue) * cramertj: I think implementing trait aliases might be unnecessary if we had working default impls / partial impls * AFIDT * nikomatsakis: been talking with errs, next step is probably some blogging, a design meeting here would be good * pin ergonomics * impl work proceeding, frank king has been making progress * seems excited * trait for generators (sync) <-- done * dynosaur 1.0 * Stabilizable prototype for expanded const generics * probably wants a second one ### Stabilizations TC: In the context of shipping features and making room in our queue, the place we could make the biggest immediate difference with focused attention is in moving the things already at the end of our process, i.e. stabilizations. Here are some on which we might want to focus: - [Arbitrary self types](https://github.com/rust-lang/rust/pull/135881) - We need to review and decide on the regressions in #136776 and #136776. - [`derive(CoercePointee)`](https://github.com/rust-lang/rust/pull/133820) - Certain of the items that block this also block arbitrary self types. Is there anything we can do? - [Let chains](https://github.com/rust-lang/rust/pull/132833) - We need to review our happiness with the drop order. - TC: My evaluation is that the drop order is consistent with how `if let` works in Rust 2024, but it's still kind of deeply unpleasant. We probably shouldn't block on this, but we should think about what we might do in Rust 2025+ to improve. - Best reference is this PR: https://github.com/rust-lang/rust/pull/133605/files - Conclusion: Somebody tries to write this up and we check it during triage: - TC to take point - nikomatsakis's tl;dr from skimming the test... - boolean conditions are dropped "immediately" before you enter the if-block (left-to-right-ish) - as are "ignored" items from `let` patterns, e.g., `Ok(_) = foo` - bound items are dropped after exiting the if-block - pretty comparable to "let desugaring" where you get - [`naked_functions`](https://github.com/rust-lang/rust/pull/134213) - [`anonymous_lifetime_in_impl_trait`](https://github.com/rust-lang/rust/pull/107378) - Niko and tmandry had posted thoughts awhile back about how this should work. - Niko proposed a [minimal subset](https://github.com/rust-lang/rust/pull/107378#issuecomment-1782824506) that seemed safe that we might look at. - `fn foo(x: impl Iterator<Item = &u32>) // equivalent to 'a in fn foo<'a>` - `fn foo(&self) -> impl Iterator<Item = &u32> // equivalent to 'a in fn foo<'a>(&'a self)` - `fn foo<'b>(x: impl Iterator<'b, Item = &u32>) // equivalent to 'a in fn foo<'a> (NOT 'b)` - not stabilized: - `fn foo(x: impl LendingIterator<Item<'_> = &u32>)` - `fn foo(x: impl FooBar<_, Item = &u32>)` - Niko would like to have a shorter version of `for` (maybe `'_`?) in - `where T: for<'a> Foo<'a>` - `where T: for<'a> Foo<Item<'a> = X>` - another comment worth re-reading: - https://github.com/rust-lang/rust/pull/107378#issuecomment-1779629217 - [Sanitizers](https://github.com/rust-lang/rust/pull/123617) - We need to decide on some syntax that is like `#[coverage(off)]` for sanitizers. - [`macro_metavar_expr`](https://github.com/rust-lang/rust/pull/122808) - We accepted an RFC for this, but have been blocking the stabilization. It seems we should work out the path forward (or not) here. ### Other scottmcm: - Is there anything worth having about allowing more types into const generic parameters? Josh: - I think we should have at least one extended-triage meeting in the next two months, as well. - scottmcm: +1 Yosh: - At some point I want to show y'all the placing-constructor prototype I've written. It seems like it might tie to a number of ongoing initiatives (pinning, AFIT dyn dispatch) I'll file a meeting issue for this - but wanted to mention it :) ## Proposed meetings - "discuss/resolve `fn { mod { (use) super::...; } }` and its interaction with derive patterns" [#193](https://github.com/rust-lang/lang-team/issues/193) - "Design meeting: Rust issues encountered by new Rust users in the Bevy project" [#229](https://github.com/rust-lang/lang-team/issues/229) - "Design meeting: Let chains, guard patterns, and `is`; oh my!" [#278](https://github.com/rust-lang/lang-team/issues/278) - "Discuss agendas for Rust All Hands" [#279](https://github.com/rust-lang/lang-team/issues/279) - "Alternative model for pattern matching and match ergonomics" [#280](https://github.com/rust-lang/lang-team/issues/280) - Is this still active? - "Design meeting: Async iteration (part 1)" [#284](https://github.com/rust-lang/lang-team/issues/284) - "Design meeting: Effect-Generic Trait Declarations" [#287](https://github.com/rust-lang/lang-team/issues/287) - "Design meeting: Trait method impl restrictions" [#288](https://github.com/rust-lang/lang-team/issues/288) - "Design meeting: Discuss improvements to stabilization procedures" [#302](https://github.com/rust-lang/lang-team/issues/302) - "Design meeting: SIMD multiversioning" [#309](https://github.com/rust-lang/lang-team/issues/309) - https://hackmd.io/@veluca93/simd-multiversioning - "Design meeting: `macro_metavar_expr`" [#310](https://github.com/rust-lang/lang-team/issues/310) - "Design meeting: `anonymous_lifetime_in_impl_trait`" [#311](https://github.com/rust-lang/lang-team/issues/311) - "Design meeting: let chains" [#312](https://github.com/rust-lang/lang-team/issues/312) - "Design meeting: `Freeze` in bounds (RFC 3633), part 2" [#313](https://github.com/rust-lang/lang-team/issues/313) - "Champions v3" [#314](https://github.com/rust-lang/lang-team/issues/314) Please update these in https://github.com/orgs/rust-lang/projects/31/views/7. ## Active initiatives ### "project-safe-transmute" lang-team#21 **Link:** https://github.com/rust-lang/lang-team/issues/21 ### "const-evaluation" lang-team#22 **Link:** https://github.com/rust-lang/lang-team/issues/22 ### "const-generics" lang-team#51 **Link:** https://github.com/rust-lang/lang-team/issues/51 ### "Deref patterns" lang-team#88 **Link:** https://github.com/rust-lang/lang-team/issues/88 ### "Generators (iterator functions), sync and async" lang-team#137 **Link:** https://github.com/rust-lang/lang-team/issues/137 ### "Initiative: trusted external static declarations" lang-team#149 **Link:** https://github.com/rust-lang/lang-team/issues/149 ## Pending proposals on the lang-team repo None.