--- title: Planning meeting 2025-01-08 tags: ["T-lang", "planning-meeting", "minutes"] date: 2025-01-08 discussion: https://rust-lang.zulipchat.com/#narrow/channel/410673-t-lang.2Fmeetings/topic/Planning.20meeting.202025-01-08 url: https://hackmd.io/wbq3ggrpTZaJbnHYeD8fCQ --- # T-lang planning meeting agenda - Meeting date: 2025-01-08 ## Attendance - People: TC, nikomatsakis, tmandry, scottmcm, Josh, eholk, davidtwo, cramertj, Jubilee ## Meeting roles - Minutes, driver: TC ## Availability - 2025-01-15: Const traits - Josh unavailable - 2025-01-22: Extended triage - nikomatsakis absent, tmandry unsure, Josh may be late but should be available - If we don't get to it today, maybe we could try to finish the `#[final]` bikeshed? - 2025-01-29: Generators Part 1 - Josh may be late but should be available - 2025-02-05: Hierarchy of Sized traits - Josh unavailable (in the middle of the Sahara Desert) - Niko unsure - 2025-02-12: Generators Part 2 - 2025-02-19: Unsafe fields (w/ Jack Wrenn, Ralf?) - Rust Nation is on this date. - 2025-02-26: C++ interop - We want folks from compiler at this meeting. - David, Wesley, maybe others. - We'll invite and coordinate with the folks at the Foundation working on this also, in particular Jon Baumann. - 2025-03-05: Planning meeting ## Project goals? We may want to leave some of the February design meetings to be scheduled after we finalize our project goals. https://rust-lang.github.io/rust-project-goals/2025h1/index.html Current list of design meetings includes... ### Scheduled - Trait for generators (sync) Tyler Mandry 2 meetings expected - Trait for async iteration Tyler Mandry - Unsafe Fields Jack Wrenn can Ralf - Evaluate approaches for seamless interop between C++ and Rust Tyler Mandry 2-3 meetings expected; all involve lang - first meeting scheduled on Feb ### Unscheduled, what's the status? - Experiment with ergonomic ref-counting, Santiago Pastorino - Niko is working with Santiago on an experimental implementation, first version is close to landing, some follow-up work is needed. - Niko and Josh may need to sync about this and changes from the proposed RFC. - We need to summarize the RFC thread and probably need another design meeting or two. Concerns... - Will the "half-step" in the RFC lead to larger confusion for newcomers? - Might want 2 design meetings? - Design and iteration for macro fragment fields, Josh Triplett - There are existing RFCs. - Safe pin projection, Tyler Mandry, Stretch goal - Part of async, active experimentation underway - Path to "safe pin projections" is nebulous, nothing implemented - Field Projections, Benno Lossin - Talked with Benno; he said March would be good. There is an RFC; we had some earlier discussion on it. There's some debate about what the exact problem we're solving here is. We're in an early phase in terms of the design. - Null and enum-discriminant runtime checks in debug builds, Bastian Kersting - "Add runtime checks to rustc that check for null pointers on pointer access and invalid enum discriminants. Similar to integer overflow and pointer alignment checks, this will only be enabled in debug builds." - Doesn't really need a design meeting. - https://rust-lang.github.io/rust-project-goals/2025h1/null-enum-discriminant-debug-checks.html - [Nightly support for ergonomic SIMD multiversioning](https://rust-lang.github.io/rust-project-goals/2025h1/simd-multiversioning.html#ownership-and-team-asks) - "Figure out the best way for Rust to support generating code for multiple SIMD targets in a safe and ergonomic way." - "Even within the same architecture, CPUs vary significantly in which SIMD ISA extensions they implement1. Most libraries that are shipped to users in binary form thus tend to contain code for different SIMD targets and use runtime dispatch. Having compiler support for this pattern, i.e. by having the compiler generate multiple versions of code written only once, would significantly help drive Rust's adoption in the world of codecs, where some of the most subtle memory vulnerabilities are found, as well as other domains where squeezing out the last bits of performance is fundamental." - Jubilee's summary re: multiversioning: many questions here are non-lang-related but there are some lang-related questions, so the feasibility of this has a bunch of compiler implmentation questions that will feed back into lang decisions probably. - status quo: target features are currently handled by a sort of implicit global effect managed via attributes and `unsafe {}` - compiler challenge: if this is handled via generics, it introduces generics that affect inlining, how do we address this without regressing compile time? - the lang questions have to do partly with what sort of syntactic support we want: given the compiler challenge, do we want to make it possible to lift the target feature that a function needs to be called into the function's type at all? - if we do want to support any typing of these functions, do we want to support a full-on `struct Avx([f32; 8])` that implicitly has target features attached to all its methods? - compiler inlining questions are probably blocked on finding support for reviewing the experiment (who? saethlin?) - const-generic-based impls would be blocked on `adt_const_params` probably + more compiler support? (what exactly?) - Next 6 months: - A design meeting is scheduled to discuss the best approach forward on this topic. - A lang team experiment is approved, enabling exploration in the compiler of the proposed approach. - A RFC is posted, based on the results of the exploration, and reviewed. <-- this may be unrealistic, niko thinks - The implementation is updated to reflect changes from the RFC, and becomes broadly available in the nightly compiler. ### Match ergonomics * Niko would like an "invited goal" of "put `&` in patterns" - Match ergonomics Rule 4 early / Rule 4E. ### Misc items from CE's December update https://hackmd.io/@compiler-errors/errs-december-2024 - Unsafe binders - AFIDT - Impl trait in bindings ### Misc items from Niko - Overwrite trait? - https://smallcultfollowing.com/babysteps/blog/2024/10/14/overwrite-and-pin/ - The borrow checker within? - https://smallcultfollowing.com/babysteps/blog/2024/06/02/the-borrow-checker-within/ ## Generators This is a high priority work item. We might want something like two consecutive design meetings for this. Or we should schedule an independent slot for this. ## Hierarchy of Sized traits We had an earlier design meeting about this, maybe in November. Since then, there has been much discussion and many updates to the RFC. We'll probably need another design meeting on this. There's also a dependency between this and const traits... ## Const traits Oli has a draft of an RFC, and this will probably go up in the next few days or next week. It may make sense for us to tackle this dependency first -- at least to have the preliminary design meeting for it -- before circling back to the hierarchy of Sized traits. ## 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) - "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) 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. ## Pending PRs on the lang-team repo ### "Consensus check: `let`-chains and `is` are not mutually exclusive" lang-team#297 **Link:** https://github.com/rust-lang/lang-team/issues/297 ### "Proposal: Remove `i128`/`u128` from the `improper_ctypes` lint" lang-team#255 **Link:** https://github.com/rust-lang/lang-team/issues/255 ### "Lang discussion: Item-level `const {}` blocks, and `const { assert!(...) }`" lang-team#251 **Link:** https://github.com/rust-lang/lang-team/issues/251 ### "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 ### "clarify lint policy " lang-team#48 **Link:** https://github.com/rust-lang/lang-team/issues/48 ### "const-generics" lang-team#51 **Link:** https://github.com/rust-lang/lang-team/issues/51 ### "Make a place for a "lang team wishlist"" lang-team#54 **Link:** https://github.com/rust-lang/lang-team/issues/54 ### "Link in design meeting template is dead" lang-team#80 **Link:** https://github.com/rust-lang/lang-team/issues/80 ### "Eventual Concern: Send/Sync insufficient in the presence of multiple execution contexts." lang-team#87 **Link:** https://github.com/rust-lang/lang-team/issues/87 ### "Deref patterns" lang-team#88 **Link:** https://github.com/rust-lang/lang-team/issues/88 ### "Specification of safe rust ?" lang-team#123 **Link:** https://github.com/rust-lang/lang-team/issues/123 ### "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 ### "agenda generation should include section with S-waiting-on-team + T-lang" lang-team#172 **Link:** https://github.com/rust-lang/lang-team/issues/172 ### "dead Zulip/zulip-archive links" lang-team#185 **Link:** https://github.com/rust-lang/lang-team/issues/185 ### "HTTP Error 404 in the Chat Platform p link" lang-team#186 **Link:** https://github.com/rust-lang/lang-team/issues/186 ### "discuss/resolve `fn { mod { (use) super::...; } }` and its interaction with derive patterns" lang-team#193 **Link:** https://github.com/rust-lang/lang-team/issues/193 ### "lang agenda generator ignores lang-nominated closed issues" lang-team#199 **Link:** https://github.com/rust-lang/lang-team/issues/199 ### "mdbook build and deploy is failing" lang-team#221 **Link:** https://github.com/rust-lang/lang-team/issues/221 ### "Design meeting: Rust issues encountered by new Rust users in the Bevy project" lang-team#229 **Link:** https://github.com/rust-lang/lang-team/issues/229 ### "Add soqb`s design doc to variadics notes" lang-team#236 **Link:** https://github.com/rust-lang/lang-team/pull/236 ### "Update auto traits design notes with recent discussion" lang-team#237 **Link:** https://github.com/rust-lang/lang-team/pull/237 ### "Lang-team RFC guidelines appear to be out of date" lang-team#244 **Link:** https://github.com/rust-lang/lang-team/issues/244 ### "Update hackmd link to a public link" lang-team#258 **Link:** https://github.com/rust-lang/lang-team/pull/258 ### "Adding a link to "how to add a feature gate" in the experimenting how-to" lang-team#267 **Link:** https://github.com/rust-lang/lang-team/pull/267 ### "Design meeting: Let chains, guard patterns, and `is`; oh my!" lang-team#278 **Link:** https://github.com/rust-lang/lang-team/issues/278 ### "Discuss agendas for Rust All Hands" lang-team#279 **Link:** https://github.com/rust-lang/lang-team/issues/279 ### "Alternative model for pattern matching and match ergonomics" lang-team#280 **Link:** https://github.com/rust-lang/lang-team/issues/280 ### "Design meeting: Async iteration (part 1)" lang-team#284 **Link:** https://github.com/rust-lang/lang-team/issues/284 ### "Design meeting: Effect-Generic Trait Declarations" lang-team#287 **Link:** https://github.com/rust-lang/lang-team/issues/287 ### "Design meeting: Trait method impl restrictions" lang-team#288 **Link:** https://github.com/rust-lang/lang-team/issues/288 ### "text describing how other teams are enabled to make decisions." lang-team#290 **Link:** https://github.com/rust-lang/lang-team/pull/290 ### "Design meeting: Sized hierarchy" lang-team#298 **Link:** https://github.com/rust-lang/lang-team/issues/298 ### "Design meeting: Match ergonomics: Part 4" lang-team#300 **Link:** https://github.com/rust-lang/lang-team/issues/300 ### "Design meeting: Effect safety and associated types with the Flix team" lang-team#301 **Link:** https://github.com/rust-lang/lang-team/issues/301 ### "Design meeting: Discuss improvements to stabilization procedures" lang-team#302 **Link:** https://github.com/rust-lang/lang-team/issues/302