---
title: Planning meeting 2024-09-04
tags: ["T-lang", "planning-meeting", "minutes"]
date: 2024-09-04
discussion: https://rust-lang.zulipchat.com/#narrow/stream/410673-t-lang.2Fmeetings/topic/Planning.20meeting.202024-09-04
url: https://hackmd.io/MC6BC7nSROuDhcCidDKtKA
---
# T-lang planning meeting agenda
- Meeting date: 2024-09-04
## Attendance
- People: TC, nikomatsakis, pnkfelix, tmandry, Josh, Xiang, Nadri, Yanquing
## Meeting roles
- Minutes, driver: TC
## 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: Profiles" [#245](https://github.com/rust-lang/lang-team/issues/245)
- "Design meeting: Let chains, guard patterns, and `is`; oh my!" [#278](https://github.com/rust-lang/lang-team/issues/278)
- "Discuss agendas for future in-person meeting opportunities" [#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)
- "Meeting proposal: rename "object safety" to "dyn compatibility"" [#286](https://github.com/rust-lang/lang-team/issues/286)
- "Design meeting: Effect-Generic Trait Declarations" [#287](https://github.com/rust-lang/lang-team/issues/287)
Please update these in https://github.com/orgs/rust-lang/projects/31/views/7.
## Design meeting calendar
- 11th: RustConf / meetup
- Topics for pre-RustConf meeting
- Propose to discuss:
- "object safety" -> "dyn compatibility"?
- let chains, guard patterns, `is`
- async closures and process for deciding final syntax?
- Profiles?
- 18th:
- Extended triage?
- 25th:
- Profiles?
NM: This is (imo) a pretty major ergonomic win:
```rust
#![feature(...)] // needed
fn main(x: &[u32]) {
for &x in numbers {
println!("{x}");
}
}
```
## Draft agendas for meetup
### As discussed today
Monday morning:
- Design goals:
- Tyler to bring a draft.
- Goal of meeting: ??
- Desired output: Preliminary set of well understood, pithy phrases that capture the essence of what Rust strives to be.
- Use cases.
- Desired output:
Monday afternoon:
- Vibe checks.
- Long-standing challenges.
- How do we solve?
- First half of unconference sessions.
Tuesday morning: Big and medium goals.
Tuesday afternoon:
- Small goals (if not on Monday).
- Unconference sessions.
- Niko's Design Axiom's Take 3 doc (but this is not the structure Tyler has been experimenting with): https://hackmd.io/snT5U6C2TIGtgTxDSo_FyQ
### Draft from Josh
https://hackmd.io/hw7TyiAtRna_L6moGE3ySg
(This is a preliminary sketch/draft of possible agenda items for the pre-RustConf lang summit.)
Recommendation: time-bound all items, do explicit time checks and make explicit decisions to continue or move on; otherwise, nerdsniping, bikeshedding, and other attractors will likely make a small number of items consume the entire time.
Neither sections nor items within sections are in priority order. In particular, we shouldn't prioritize everything in "Process" above everything in the "Long-standing ..." sections, as tempting as that may be.
#### Process
Process/Bikeshed attractor warning: some of these topics seem especially likely to become time sinks.
- Should we establish a "design team", a parent team of T-lang and T-libs-api and (portions of) T-cargo and likely others with substantial design components?
- Handle overlapping items, host design meetings, accelerate coordination of items that would otherwise play ping-pong with round-trip latencies of weeks
- Should we establish/hire/pay a group of one or more people we can delegate small tasks to?
- Goal: have a default way to handle things that need a few hours or a few days to complete.
- Small bits of design or similar iteration on something we care about seeing finished in a timely fashion
- Simple experiments
- Process automation
- Leadership Council budget
- New decision process and its automation
- We've had draft implementations for a long time, we should review/test them and figure out what it'd take to deploy them
- Could we auto-start decisions on e.g. T-lang RFCs?
- Could we let anyone in the project start a T-lang decision?
- Handling changes that draw community pile-ons / :-1:s
- How do we balance design experiments with the potential for "establishing facts on the ground" / building momentum towards particular alternatives?
#### Values, design axioms, Rust philosophy
- "I would like to draft an RFC laying out design axioms for Rust as well as representative personas. I'd like to discuss this with the team early on to see if it indeed provides a useful framework in the discussions that follow. If so, I'd like to move it towards an open RFC." - nikomatsakis
- High-level and low-level Rust, "registers", "dare to ask for more" - nikomatsakis
#### Long-standing items that require consensus check or design discussion/iteration
Items in this section have had substantial design work, and *may* be relatively close to the finish line. These items may benefit from doing an explicit consensus check or vibe check.
- Externally implementable functions/statics/traits/etc ([RFC 3632](https://github.com/rust-lang/rfcs/pull/3632), [RFC 3635](https://github.com/rust-lang/rfcs/pull/3635))
- Distributed slices, and how we want to handle them in various linking scenarios
- `cfg(accessible(...))` and `cfg((version(...))`
- Can we get both of these over the finish line?
- Ergonomic ref-counting (if anything is blocking it)
- Postfix macros (`expr.mac!(args)`) ([RFC 2442](https://github.com/rust-lang/rfcs/pull/2442))
- Extending format args to support `dotted.exprs`
- Is this lang, libs-api, or both?
- Do we want to go any further, or draw a firm stopping line?
#### Long-standing language problems that still need substantial design/brainstorming
These may benefit from clarifying the problem statements, figuring out how much consensus we have on the problems, and/or whiteboarding potential solutions.
- The "only one possible impl" inference rule, and the inference breakage it causes. Should we consider changing that in a future Rust edition?
- Note for this: some surprising things, like `arr[some_usize_expr]`, may depend on this
- Should figure out what it'd take to try some experiments here
- Lint group for "I'm a popular library, please warn me about convenience/future-proofing tradeoffs and help me favor future-proofing"
- Esteban Kuber is experimenting with possibilities in this area
- Module system usability improvements: making `mod` unnecessary/optional, inferring modules from the filesystem, etc.
- Note that David Barsky from rust-analyzer will be at RustConf if we want to cross-check anything with r-a.
- Do we want a language (or library) mechanism for [tap](https://docs.rs/tap/latest/tap/)-style chaining?
- Keyword arguments (both "whether" and "how"), or more generally, what do we *want* people to do for complex function invocations?
#### Discussion items that defy categorization
(Section added to allow for brain-dumping items into the agenda before categorizing them.)
#### Relaxing and socializing
- Group photo?
- Dinner?
- Board games?
### Draft from tmandry
https://hackmd.io/SmUPhLlrSwORwuheeIDQDA
#### Meta
Time-bound all items, do explicit time checks and make explicit decisions to continue or move on; otherwise, nerdsniping, bikeshedding, and other attractors will likely make a small number of items consume the entire time.
Aim to produce artifacts that represent a fixed point of lang team consensus, prior to feedback from outside the team.
#### Logistics
TODO: Location, time, breakfast, lunch, possible evening activities
#### Sessions
##### Design goals
Time: 45 minutes
Abstract: Rust needs a language for how to design a language. Some words and phrases have emerged over time, but they can mean different things to different people.
Preparation: Niko and Tyler present their design goal draft for discussion.
Artifact: A preliminary set of well-understood pithy phrases that capture the essence of what Rust strives to be, a great programming language. We will try these phrases out throughout the rest of the summit and revisit them at the end.
##### Use cases
Time: 60 minutes
Abstract: Let's talk about the most important use cases for Rust, now and in the future, and highlight some unique needs of each.
**Preparation: Members are invited to bring examples from their own experience and projects/companies.** Tyler is preparing a high level list so we don't forget about important ones.
Artifact: A list of important, emerging, and notable use cases. Include what we know and what we don't know about the support each of the important and emerging ones needs. Examples: Web services, CLI tools, Kernels and hypervisors, Embedded.
##### Handling concerns
Time: 60 minutes
Abstract: How can we continue to make good decisions in the face of uncertainty and disagreement within the team? Quality is important, but so is speed and steady progress. Rust is not alone in the space of C/C++ successors, and many of those are able to iterate more quickly – even C++ has added async/await and coroutines.
Preparation: TODO
Artifact: A list of process changes.
##### Big goals (next 3-6 years)
Time: 60 minutes
Abstract: What are the big problems we hope to tackle over the next 3-6 years in Rust?
Preparation: TODO
Artifact: A list of 7 goals we think are worthy of the title "big goal".
##### Medium goals (next 18 months)
Time: 45 minutes
Abstract: What do we think the project should be focused on in 2025?
Preparation: TODO
Artifact: A set of 3-5 likely flagship goals and 5-10 likely team goals.
##### Short goals (24 H2)
Time: Unconf sessions for each (see below)
Abstract: What is needed to unblock our current project goals?
Preparation: TODO
Artifact: Decision trees, notes about progress made, and next steps for each.
- Async closures: Bikeshed
- Ergonomic captures: RFC revision and key questions answered. May benefit from workshopping.
##### Vibe checks
Time: 90 minutes
Abstract: Bring 1-2 Rust bucket list items and get reactions from the team. Come prepared with a 1-2 paragraph description that states the problem and rough solution as clearly as you can (short code samples are encouraged). Soft time limit of 6 minutes, hard time limit of 12 minutes per item (depending on how many we have to get through).
**Preparation: Make a list of items you'd like to discuss.**
Artifact: List of ideas, vote counts, and concerns. New discussion topics.
##### Unconference
Time: 60 minute slots
**Preparation: Brainstorm any topics you would like to discuss.** Additional topics will come up during the discussion.
We'll have sticky notes and vote on more topics.
## 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
### "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
### "We need to settle the behaviour of floating-point in `const`" lang-team#222
**Link:** https://github.com/rust-lang/lang-team/issues/222
### "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
### "Design meeting: Profiles" lang-team#245
**Link:** https://github.com/rust-lang/lang-team/issues/245
### "Update hackmd link to a public link" lang-team#258
**Link:** https://github.com/rust-lang/lang-team/pull/258
### "Design meeting: New Range types for Rust 2024" lang-team#259
**Link:** https://github.com/rust-lang/lang-team/issues/259
### "Design meeting: async closures" lang-team#262
**Link:** https://github.com/rust-lang/lang-team/issues/262
### "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
### "Review project goal slate" lang-team#271
**Link:** https://github.com/rust-lang/lang-team/issues/271
### "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 future in-person meeting opportunities" 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
### "Planning meeting: 2024-09-04" lang-team#285
**Link:** https://github.com/rust-lang/lang-team/issues/285
### "Meeting proposal: rename "object safety" to "dyn compatibility"" lang-team#286
**Link:** https://github.com/rust-lang/lang-team/issues/286
### "Design meeting: Effect-Generic Trait Declarations" lang-team#287
**Link:** https://github.com/rust-lang/lang-team/issues/287