diff --git a/crates/mdbook-goals/src/mdbook_preprocessor.rs b/crates/mdbook-goals/src/mdbook_preprocessor.rs index 0398e1a6..52eb5446 100644 --- a/crates/mdbook-goals/src/mdbook_preprocessor.rs +++ b/crates/mdbook-goals/src/mdbook_preprocessor.rs @@ -10,6 +10,7 @@ use mdbook::BookItem; use regex::{Captures, Regex}; use rust_project_goals::config::Configuration; use rust_project_goals::format_team_ask::format_team_asks; +use rust_project_goals::format_champions::format_champions; use rust_project_goals::util::{self, GithubUserInfo}; use rust_project_goals::spanned::Spanned; @@ -147,6 +148,7 @@ impl<'c> GoalPreprocessorWithContext<'c> { match book_item { BookItem::Chapter(chapter) => { self.replace_metadata_placeholders(chapter)?; + self.replace_champions(chapter)?; self.replace_team_asks(chapter)?; self.replace_valid_team_asks(chapter)?; self.replace_goal_lists(chapter)?; @@ -308,6 +310,26 @@ impl<'c> GoalPreprocessorWithContext<'c> { } } + /// Look for `(((CHAMPIONS)))` in the chapter content and replace it with the champions table. + fn replace_champions(&mut self, chapter: &mut Chapter) -> anyhow::Result<()> { + let Some(m) = re::CHAMPIONS.find(&chapter.content) else { + return Ok(()); + }; + let range = m.range(); + + let Some(path) = &chapter.path else { + anyhow::bail!("found `(((CHAMPIONS)))` but chapter has no path") + }; + + let goals = self.goal_documents(path)?; + let goal_refs: Vec<&GoalDocument> = goals.iter().collect(); + let format_champions = + format_champions(&goal_refs).map_err(|e| anyhow::anyhow!("{e}"))?; + chapter.content.replace_range(range, &format_champions); + + Ok(()) + } + /// Look for `` in the chapter content and replace it with the team asks. fn replace_team_asks(&mut self, chapter: &mut Chapter) -> anyhow::Result<()> { let Some(m) = re::TEAM_ASKS.find(&chapter.content) else { diff --git a/crates/rust-project-goals-cli/src/csv_reports.rs b/crates/rust-project-goals-cli/src/csv_reports.rs index d84412cd..0f69ecfa 100644 --- a/crates/rust-project-goals-cli/src/csv_reports.rs +++ b/crates/rust-project-goals-cli/src/csv_reports.rs @@ -39,7 +39,7 @@ fn champions(repository: &Repository, milestone: &str) -> Result<()> { let rows: Vec = goal_documents .iter() .map(|doc| ChampionRow { - title: doc.metadata.title.clone(), + title: doc.metadata.title.to_string(), url: format!( "https://github.com/{org}/{repo}/blob/main/{path}", org = repository.org, diff --git a/crates/rust-project-goals-cli/src/rfc.rs b/crates/rust-project-goals-cli/src/rfc.rs index 72cb6cdc..6b163e16 100644 --- a/crates/rust-project-goals-cli/src/rfc.rs +++ b/crates/rust-project-goals-cli/src/rfc.rs @@ -420,7 +420,7 @@ fn issue<'doc>(timeframe: &str, document: &'doc GoalDocument) -> Result Result { + use std::fmt::Write; + + let mut output = String::new(); + + // Collect champions and their goals + let mut champion_goals: BTreeMap> = BTreeMap::new(); + + for goal in goals { + for champion in goal.metadata.champions.values() { + let champion_name = champion.content.clone(); + let goal_link = format!("° [{}]({})", goal.metadata.title.content, goal.link_path.display()); + + champion_goals + .entry(champion_name) + .or_default() + .insert(goal_link); + } + } + + if champion_goals.is_empty() { + return Ok("No champions found.".to_string()); + } + + // Create the table + let table = { + let headings = vec![ + Spanned::here("Champion".to_string()), + Spanned::here("#".to_string()), + Spanned::here("Goals".to_string()), + ]; + + let rows = champion_goals.into_iter().map(|(champion, goals)| { + let goals_vec: Vec = goals.into_iter().collect(); + vec![ + Spanned::here(champion), + Spanned::here(goals_vec.len().to_string()), + Spanned::here(goals_vec.join("
")), + ] + }); + + std::iter::once(headings).chain(rows).collect::>() + }; + + write!(output, "{}", util::format_table(&table))?; + + Ok(output) +} diff --git a/crates/rust-project-goals/src/format_team_ask.rs b/crates/rust-project-goals/src/format_team_ask.rs index 22dcdf69..920c325f 100644 --- a/crates/rust-project-goals/src/format_team_ask.rs +++ b/crates/rust-project-goals/src/format_team_ask.rs @@ -59,12 +59,14 @@ pub fn format_team_asks(asks_of_any_team: &[&TeamAsk]) -> Result { // the configuration. We prune out the ones that do not appear in the asks for a particular team. let ask_headings = config .team_asks - .keys() - .filter(|&ask_kind| { - asks_of_this_team - .iter() - .any(|a| &a.ask_description == ask_kind) + .iter() + .filter(|&(ask_kind, ask_details)| { + !ask_details.elide + && asks_of_this_team + .iter() + .any(|a| &a.ask_description == ask_kind) }) + .map(|(ask_kind, _)| ask_kind) .collect::>(); let empty_row = || { (0..ask_headings.len()) @@ -79,10 +81,15 @@ pub fn format_team_asks(asks_of_any_team: &[&TeamAsk]) -> Result { let row = goal_rows.entry(goal_data).or_insert_with(empty_row); - let index = ask_headings - .iter() - .position(|&h| h == &ask.ask_description) - .unwrap(); + let Some(index) = ask_headings.iter().position(|&h| h == &ask.ask_description) else { + // Some asks are not included in the table + assert!( + config.team_asks[&ask.ask_description].elide, + "ask {} has no index but is not elided", + ask.ask_description + ); + continue; + }; let text = if !ask.notes.is_empty() { &ask.notes diff --git a/crates/rust-project-goals/src/goal.rs b/crates/rust-project-goals/src/goal.rs index d894a36e..ae10d97d 100644 --- a/crates/rust-project-goals/src/goal.rs +++ b/crates/rust-project-goals/src/goal.rs @@ -43,7 +43,7 @@ pub struct GoalDocument { #[derive(Debug, PartialEq, Eq, PartialOrd, Ord)] pub struct Metadata { #[allow(unused)] - pub title: String, + pub title: Spanned, pub short_title: Spanned, pub pocs: String, pub status: Spanned, @@ -117,7 +117,7 @@ pub fn goals_in_dir(directory_path: &Path) -> Result> { if path.file_name().unwrap() == "TEMPLATE.md" { continue; } - + if let Some(goal_document) = GoalDocument::load(&path, &link_path)? { goal_documents.push(goal_document); } @@ -137,11 +137,7 @@ impl GoalDocument { let link_path = Arc::new(link_path.to_path_buf()); - let goal_plans = if metadata.status.is_not_not_accepted() { - extract_plan_items(§ions)? - } else { - vec![] - }; + let goal_plans = extract_plan_items(§ions)?; let mut team_asks = vec![]; for goal_plan in &goal_plans { @@ -156,7 +152,10 @@ impl GoalDocument { // Enforce that every goal has some team asks (unless it is not accepted) if metadata.status.is_not_not_accepted() && team_asks.is_empty() { - spanned::bail_here!("no team asks in goal; did you include `![Team]` in the table?"); + spanned::bail!( + metadata.title, + "no team asks in goal; did you include `![Team]` in the table?" + ); } let task_owners = goal_plans @@ -168,7 +167,7 @@ impl GoalDocument { Ok(Some(GoalDocument { path: path.to_path_buf(), link_path, - summary: summary.unwrap_or_else(|| metadata.title.clone()), + summary: summary.unwrap_or_else(|| (*metadata.title).clone()), metadata, team_asks, goal_plans, @@ -213,13 +212,14 @@ impl GoalDocument { pub fn format_goal_table(goals: &[&GoalDocument]) -> Result { // If any of the goals have tracking issues, include those in the table. - let goals_are_proposed = goals - .iter() - .any(|g| g.metadata.status.acceptance == AcceptanceStatus::Proposed); + let show_champions = goals.iter().any(|g| { + g.metadata.status.acceptance == AcceptanceStatus::Proposed + || g.metadata.status.acceptance == AcceptanceStatus::NotAccepted + }); let mut table; - if !goals_are_proposed { + if !show_champions { table = vec![vec![ Spanned::here("Goal".to_string()), Spanned::here("Point of contact".to_string()), @@ -249,7 +249,7 @@ pub fn format_goal_table(goals: &[&GoalDocument]) -> Result { table.push(vec![ Spanned::here(format!( "[{}]({})", - goal.metadata.title, + *goal.metadata.title, goal.link_path.display() )), Spanned::here(goal.point_of_contact_for_goal_list()), @@ -260,7 +260,7 @@ pub fn format_goal_table(goals: &[&GoalDocument]) -> Result { table = vec![vec![ Spanned::here("Goal".to_string()), Spanned::here("Point of contact".to_string()), - Spanned::here("Team".to_string()), + Spanned::here("Team(s) and Champion(s)".to_string()), ]]; for goal in goals { @@ -270,15 +270,27 @@ pub fn format_goal_table(goals: &[&GoalDocument]) -> Result { .flat_map(|ask| &ask.teams) .copied() .collect(); - let teams: Vec<&TeamName> = teams.into_iter().collect(); + + // Format teams with champions in parentheses + let teams_with_champions: Vec = teams + .into_iter() + .map(|team| { + if let Some(champion) = goal.metadata.champions.get(team) { + format!("{} ({})", team, champion.content) + } else { + team.to_string() + } + }) + .collect(); + table.push(vec![ Spanned::here(format!( "[{}]({})", - goal.metadata.title, + *goal.metadata.title, goal.link_path.display() )), Spanned::here(goal.point_of_contact_for_goal_list()), - Spanned::here(commas(&teams)), + Spanned::here(teams_with_champions.join(", ")), ]); } } @@ -493,7 +505,7 @@ fn extract_metadata(sections: &[Section]) -> Result> { .map(|row| row[1].clone()); Ok(Some(Metadata { - title: title.to_string(), + title: title.clone(), short_title: if let Some(row) = short_title_row { row[1].clone() } else { @@ -508,8 +520,6 @@ fn extract_metadata(sections: &[Section]) -> Result> { })) } - - fn extract_summary(sections: &[Section]) -> Result> { let Some(ownership_section) = sections.iter().find(|section| section.title == "Summary") else { return Ok(None); @@ -540,13 +550,6 @@ fn extract_plan_items<'i>(sections: &[Section]) -> Result> { goal_plans.extend(goal_plan(Some(subsection.title.clone()), subsection)?); } - if goal_plans.is_empty() { - spanned::bail!( - sections[ownership_index].title, - "no goal table items found in the `Ownership and team asks` section or subsections" - ) - } - Ok(goal_plans) } diff --git a/crates/rust-project-goals/src/lib.rs b/crates/rust-project-goals/src/lib.rs index 7cea3154..54492626 100644 --- a/crates/rust-project-goals/src/lib.rs +++ b/crates/rust-project-goals/src/lib.rs @@ -1,5 +1,6 @@ pub mod config; pub mod format_team_ask; +pub mod format_champions; pub mod gh; pub mod goal; pub mod markwaydown; diff --git a/crates/rust-project-goals/src/re.rs b/crates/rust-project-goals/src/re.rs index f866dae5..2501dc6b 100644 --- a/crates/rust-project-goals/src/re.rs +++ b/crates/rust-project-goals/src/re.rs @@ -5,6 +5,10 @@ lazy_static! { pub static ref TEAM_ASKS: Regex = Regex::new(r"\(\(\(TEAM ASKS\)\)\)").unwrap(); } +lazy_static! { + pub static ref CHAMPIONS: Regex = Regex::new(r"\(\(\(CHAMPIONS\)\)\)").unwrap(); +} + // List of all goals, flagship or otherwise lazy_static! { pub static ref GOAL_LIST: Regex = Regex::new(r"\(\(\(GOALS\)\)\)").unwrap(); @@ -112,6 +116,6 @@ pub const TLDR: &str = "TL;DR:"; lazy_static! { /// Metadata table rows like `[lang] champion` indicate the champion for the lang team pub static ref CHAMPION_METADATA: Regex = - Regex::new(r"^\s*(?P\[.*\]) champion)\s*$") + Regex::new(r"^\s*\[(?P.*)\] champion\s*$") .unwrap(); } diff --git a/rust-project-goals.toml b/rust-project-goals.toml index 61253392..1e15cbde 100644 --- a/rust-project-goals.toml +++ b/rust-project-goals.toml @@ -5,11 +5,10 @@ [team_asks] "Allocate funds" = { short="Alloc funds", about="allocate funding" } -"Discussion and moral support" = { short="Good vibes", about="approve of this direction and be prepared for light discussion on Zulip or elsewhere" } +"Discussion and moral support" = { short="Good vibes", about="approve of this direction and be prepared for light discussion on Zulip or elsewhere", elide = true } "Deploy to production" = { short="Deploy", about="deploy code to production (e.g., on crates.io" } -"Standard reviews" = { short="r?", about="review PRs (PRs are not expected to be unduly large or complicated)" } +"Standard reviews" = { short="r?", about="review PRs (PRs are not expected to be unduly large or complicated)", elide = true } "Dedicated reviewer" = { short="Ded. r?", about="assign a specific person (or people) to review a series of PRs, appropriate for large or complex asks" } -"Lang-team champion" = { short="Champion", about="member of lang team or advisors who will champion the design within team" } "Lang-team experiment" = { short="Experiment", about="begin a [lang-team experiment](https://lang-team.rust-lang.org/how_to/experiment.html) authorizing experimental impl of lang changes before an RFC is written; limited to trusted contributors" } "Design meeting" = { short="Design mtg.", about="hold a synchronous meeting to review a proposal and provide feedback (no decision expected)" } "RFC decision" = { short="RFC", about="review an RFC and deciding whether to accept" } diff --git a/src/2025h1/GPU-Offload.md b/src/2025h1/GPU-Offload.md index 876f9314..873d2c7f 100644 --- a/src/2025h1/GPU-Offload.md +++ b/src/2025h1/GPU-Offload.md @@ -83,7 +83,6 @@ Minimal "smoke test" reviews will be needed from the compiler-team. The Rust lan |----------------------|------------------------|------------| | Development | @ZuseZ4 | | | Lang-team experiment | ![Team][] [lang][] | ![Complete][] | -| Lang-team champion | ![Team][] [lang][] | @traviscross | | Standard reviews | ![Team][] [compiler][] | | [Team]: https://img.shields.io/badge/Team%20ask-red diff --git a/src/2025h1/arm-sve-sme.md b/src/2025h1/arm-sve-sme.md index 6b79305a..0f3b5c3f 100644 --- a/src/2025h1/arm-sve-sme.md +++ b/src/2025h1/arm-sve-sme.md @@ -142,7 +142,6 @@ team in an RFC/FCP). | ------------------------------------------------- | ------------------------- | ---------- | | Extending type system to support scalable vectors | @davidtwco | | | Author RFC | | | -| Lang-team champion | ![Team][] [lang] | @davidtwco | | RFC decision | ![Team][] [types], [lang] | | | Implementation | | | | Standard reviews | ![Team][] [compiler] | | diff --git a/src/2025h1/async.md b/src/2025h1/async.md index 360b0731..96587aef 100644 --- a/src/2025h1/async.md +++ b/src/2025h1/async.md @@ -102,7 +102,6 @@ This section defines the specific work items that are planned and who is expecte | Author RFC | @nikomatsakis | ![Complete][] | | RFC decision | ![Team][] [lang] | ![Complete][] | | Finished implementation | @compiler-errors | ![Complete][] | -| Lang-team champion | ![Team][] [lang] | @nikomatsakis | | Standard reviews | ![Team][] [types], [compiler] | | | Author stabilization report | @compiler-errors | | | Author Reference PR | TBD (@compiler-errors, @tmandry, or @nikomatsakis) | | @@ -115,7 +114,6 @@ This section defines the specific work items that are planned and who is expecte |------------------------|---------------------------|-------------------------| | Initial implementation | @compiler-errors | Stretch goal | | Author RFC | @nikomatsakis | Stretch goal | -| Lang-team champion | ![Team][] [lang] | @nikomatsakis (stretch) | | RFC decision | ![Team][] [lang], [types] | Stretch goal | ### Implementable trait aliases @@ -124,7 +122,6 @@ This section defines the specific work items that are planned and who is expecte |--------------------|-------------------------------|----------| | Author RFC | @tmandry | | | Implementation | @compiler-errors | | -| Lang-team champion | ![Team][] [lang] | @tmandry | | Standard reviews | ![Team][] [types], [compiler] | | | RFC decision | ![Team][] [lang], [types] | | @@ -133,7 +130,6 @@ This section defines the specific work items that are planned and who is expecte | Task | Owner(s) or team(s) | Notes | |----------------------|---------------------|---------------| | Lang-team experiment | @nikomatsakis | (Approved) | -| Lang-team champion | ![Team][] [lang] | @nikomatsakis | | Implementation | @compiler-errors | Stretch goal | ### Pin ergonomics @@ -143,7 +139,6 @@ This section defines the specific work items that are planned and who is expecte | Implementation | @eholk | | | Author RFC | @eholk | | | Lang-team experiment | ![Team][] [lang] | ![Complete][] | -| Lang-team champion | ![Team][] [lang] | @tmandry | ### Trait for generators (sync) @@ -153,7 +148,6 @@ This section defines the specific work items that are planned and who is expecte | Author RFC | | | | RFC decision | ![Team][] [libs-api], [lang] | | | Design meeting | ![Team][] [lang] | 2 meetings expected | -| Lang-team champion | ![Team][] [lang] | @tmandry | ### Dynosaur 1.0 diff --git a/src/2025h1/cargo-script.md b/src/2025h1/cargo-script.md index 9379656d..24daeedf 100644 --- a/src/2025h1/cargo-script.md +++ b/src/2025h1/cargo-script.md @@ -67,7 +67,6 @@ Tracking issue [#136889](https://github.com/rust-lang/rust/issues/136889): | Rustc implementation | @epage | | | Rust-analyzer implementation | @epage | | | Standard reviews | ![Team][] [compiler] | | -| Lang-team champion | ![Team][] [lang] | @joshtriplett | | Author call for testing blog post | @epage | | ### Stabilize language feature `frontmatter` @@ -76,7 +75,6 @@ Tracking issue [#136889](https://github.com/rust-lang/rust/issues/136889): |-----------------------------|-----------------------|---------------| | Author Reference PR | @epage | | | Review/revise Reference PR | ![Team][] [lang-docs] | @ehuss | -| Lang-team champion | ![Team][] [lang] | @joshtriplett | | Author stabilization report | @epage | | | Author stabilization PR | @epage | | | Stabilization decision | ![Team][] [lang] | | diff --git a/src/2025h1/const-trait.md b/src/2025h1/const-trait.md index bc0e382e..4e86aa7b 100644 --- a/src/2025h1/const-trait.md +++ b/src/2025h1/const-trait.md @@ -59,7 +59,6 @@ Steps towards the primary goal of doing everything towards stabilization apart f | Call for testing | @oli-obk | | | Standard reviews | ![Team][] [compiler] | | | Design meeting | ![Team][] [lang] | first meeting scheduled for Jan; second meeting may be required | -| Lang-team champion | ![Team][] [lang] | @nikomatsakis | | RFC decision | ![Team][] [lang] | (stretch goal) | | RFC secondary review | ![Team][] [types] | Types team needs to validate the approach | | Author specification 1st draft | @oli-obk | | diff --git a/src/2025h1/eii.md b/src/2025h1/eii.md index fd383607..cbfd27ca 100644 --- a/src/2025h1/eii.md +++ b/src/2025h1/eii.md @@ -106,7 +106,6 @@ The experimental feature we implement should: |----------------------------------|----------------------|------------------------------| | Discussion and moral support | [compiler], [lang] | | | Lang-team experiment | ![Team][] [lang] | ![Complete][] | -| Lang-team champion | ![Team][] [lang] | @nikomatsakis | | Design experiment (syntax, etc.) | *Jana and Mara* | Done | | Refactor attributes in rustc | *Jana* | In progress, refactor merged | | Implement experiment | *Jana and Mara* | | diff --git a/src/2025h1/ergonomic-rc.md b/src/2025h1/ergonomic-rc.md index 890d5711..b4f4ad05 100644 --- a/src/2025h1/ergonomic-rc.md +++ b/src/2025h1/ergonomic-rc.md @@ -1,7 +1,7 @@ # Experiment with ergonomic ref-counting | Metadata | | -|:-----------------|------------------------------------| +| :--------------- | ---------------------------------- | | Point of contact | @spastorino | | Status | Accepted | | Tracking issue | [rust-lang/rust-project-goals#107] | @@ -80,12 +80,12 @@ We don't have consensus around a full set of "design axioms" for this design, bu ## Ownership and team asks -| Task | Owner(s) or team(s) | Notes | -|----------------|---------------------|---------------| -| Implementation | @spastorino | | -| Reviews | @nikomatsakis | | -| Lang-team champion | ![Team][] [lang] | @nikomatsakis | -| Author RFC | @joshtriplett | ![Complete][] | +| Task | Owner(s) or team(s) | Notes | +| ---------------------------- | ------------------- | ------------- | +| Implementation | @spastorino | | +| Reviews | @nikomatsakis | | +| Discussion and moral support | ![Team][] [lang] | | +| Author RFC | @joshtriplett | ![Complete][] | ### Definitions diff --git a/src/2025h1/improve-rustc-codegen.md b/src/2025h1/improve-rustc-codegen.md index 07bd36c0..537219d7 100644 --- a/src/2025h1/improve-rustc-codegen.md +++ b/src/2025h1/improve-rustc-codegen.md @@ -73,7 +73,6 @@ The shiny future is to improve rust codegen to encourage wider adoption of rust |------------------------------|----------------------|-------| | Discussion and moral support | ![Team][] [compiler] | | | Lang-team experiment | ![Team][] [lang] | | -| Lang-team champion | ![Team][] [lang] | @traviscross | | Refine RFC 3720 | @folkertdev | | | Implementation | @folkertdev, @bjorn3 | | | Standard reviews | ![Team][] [compiler] | | diff --git a/src/2025h1/macro-improvements.md b/src/2025h1/macro-improvements.md index 0f6a2556..149d0410 100644 --- a/src/2025h1/macro-improvements.md +++ b/src/2025h1/macro-improvements.md @@ -137,7 +137,6 @@ could reserve such syntax in all editions. |-------------------------------------------|--------------------------|---------------| | Author/revise/iterate RFCs | @joshtriplett | | | RFC decision | ![Team][] [lang] | | -| Lang-team champion | ![Team][] [lang] | @joshtriplett | | Implementation of RFC | @eholk, @vincenzopalazzo | | | Iterate on design as needed | @joshtriplett | | | Inside Rust blog post on attribute macros | @joshtriplett | | @@ -149,7 +148,6 @@ could reserve such syntax in all editions. |----------------------------------------|--------------------------|------------------------| | Author/revise/iterate RFCs | @joshtriplett | | | RFC decision | ![Team][] [lang] | | -| Lang-team champion | ![Team][] [lang] | @joshtriplett | | Implementation of RFC | @eholk, @vincenzopalazzo | | | Iterate on design as needed | @joshtriplett | | | Inside Rust blog post on derive macros | @joshtriplett | | @@ -162,7 +160,6 @@ could reserve such syntax in all editions. | Author initial RFC | @joshtriplett | | | Design meeting | ![Team][] [lang] | | | RFC decision | ![Team][] [lang] | | -| Lang-team champion | ![Team][] [lang] | @joshtriplett | | Implementation of RFC | @eholk, @vincenzopalazzo | | | Iterate on design as needed | @joshtriplett | | | Inside Rust blog post on additional capabilities | @joshtriplett | | diff --git a/src/2025h1/safe-linking.md b/src/2025h1/safe-linking.md index 66564089..cac235e9 100644 --- a/src/2025h1/safe-linking.md +++ b/src/2025h1/safe-linking.md @@ -112,7 +112,6 @@ safe cross-language linking. | Blog post (author, review) | MSc student, @Jdonszelmann, @m-ou-se | | | Experimental implementation | Msc student | | | Lang-team experiment | ![Team][] [lang] | @nikomatsakis | -| Lang-team champion | ![Team][] [lang] | @nikomatsakis | | Standard reviews | ![Team][] [compiler] | | | Thesis / Paper | Research team (MSc student, professor, etc.) | | diff --git a/src/2025h1/seamless-rust-cpp.md b/src/2025h1/seamless-rust-cpp.md index f3e0f831..229ff29c 100644 --- a/src/2025h1/seamless-rust-cpp.md +++ b/src/2025h1/seamless-rust-cpp.md @@ -121,7 +121,6 @@ In addition, it proposes the following axioms: |------------------------------|----------------------------------------|-----------------------------------------| | Discussion and moral support | ![Team][] [lang], [compiler], [libs-api] | | | Design meeting | ![Team][] [lang], [compiler], [libs-api] | 2-3 meetings expected; all involve lang | -| Lang-team champion | ![Team][] [lang] | @tmandry | | Author design doc | @tmandry | | | Author design doc | ![Help wanted][] | | | Author design doc | ![Help wanted][] | | diff --git a/src/2025h1/unsafe-fields.md b/src/2025h1/unsafe-fields.md index 8de8a31d..62574710 100644 --- a/src/2025h1/unsafe-fields.md +++ b/src/2025h1/unsafe-fields.md @@ -83,7 +83,6 @@ The design of `unsafe` fields is guided by three axioms: | Implementation | @veluca93 | | | Standard reviews | ![Team][] [compiler] | | | Design meeting | ![Team][] [lang] | | -| Lang-team champion | ![Team][] [lang] | @scottmcm | | RFC decision | ![Team][] [lang] | | Ongoing discussion on [Zulip][]. diff --git a/src/2025h2/FLS-up-to-date-capabilities.md b/src/2025h2/FLS-up-to-date-capabilities.md index 0faaae98..7bc235e5 100644 --- a/src/2025h2/FLS-up-to-date-capabilities.md +++ b/src/2025h2/FLS-up-to-date-capabilities.md @@ -6,6 +6,10 @@ | Status | Proposed | | Tracking issue | | | Zulip channel | #t-spec | +| [bootstrap] champion | @kobzol | +| [lang] champion | @nikomatsakis | +| [spec] champion | @PLeVasseur | + ## Summary Develop the capabilities and capacity to keep the FLS up to date with the Rust language. diff --git a/src/2025h2/README.md b/src/2025h2/README.md index 03c5093c..c63cea3f 100644 --- a/src/2025h2/README.md +++ b/src/2025h2/README.md @@ -1,19 +1,22 @@ -# Rust project goals 2025h2 -## Summary +- Feature Name: N/A +- Start Date: (fill me in with today's date, YYYY-MM-DD) +- RFC PR: [rust-lang/rfcs#373](https://github.com/rust-lang/rfcs/pull/373) +- Rust Issue: N/A -*![Status: Accepting goal proposals](https://img.shields.io/badge/Status-Accepting%20goal%20proposals-yellow) We are in the process of assembling the goal slate.* +# Summary +[summary]: #summary -This is a draft for the eventual RFC proposing the 2025h2 goals. +Propose a slate of (((#GOALS))) goals for 2025H2. -## Motivation +# Motivation The 2025h2 goal slate consists of (((#GOALS))) project goals, of which we have selected a subset as **flagship goals**. Flagship goals represent the highest priority being done by the various Rust teams. -## Guide-level explanation +# Guide-level explanation [guide-level-explanation]: #guide-level-explanation -### Rust's mission +## Rust's mission Our goals are selected to further Rust's mission of making it dramatically more accessible to author and maintain *foundational software*—the software that underlies everything else. This includes the CLI tools and development infrastructure that developers rely on, the cloud platforms that run applications, the embedded systems in devices around us, and increasingly the kernels and operating systems that power it all. @@ -21,16 +24,16 @@ Foundational software has particularly demanding requirements: reliability is pa Rust changes this balance by combining zero-cost abstractions with memory safety guarantees, often allowing you to write high-level code with low-level performance. While Rust's primary focus remains foundational software, we also recognize that supporting higher-level applications helps identify ergonomic improvements that benefit all users and enables developers to use Rust throughout their entire stack. -### Flagship goals +## Flagship goals -This period we have (((#FLAGSHIP GOALS))) flagship goals, broken out into five themes: +This period we have (((#FLAGSHIP GOALS))) flagship goals, broken out into four themes: * [Beyond the `&`](#beyond-the-), making it possible to create user-defined smart pointers that are as ergonomic as Rust's built-in references `&`. * [Unblocking dormant traits](#unblocking-dormant-traits), extending the core capabilities of Rust's trait system to unblock long-desired features for language interop, lending iteration, and more. * [Flexible, fast(er) Rust builds](#flexible-faster-rust-builds), making Rust's builds fasterand improving support for specialized build scenarios like embedded usage and sanitizers. * [Higher-level Rust](#higher-level-rust), making higher-level usage patterns in Rust easier. -#### "Beyond the `&`" +### "Beyond the `&`" (((FLAGSHIP GOALS: Beyond the `&`))) @@ -38,7 +41,7 @@ One of Rust's core value propositions is that it's a "library-based language"— The "Beyond the `&`" initiative aims `&`'s special capabilities, allowing library authors to create smart pointers that are truly indistinguishable from built-in references in terms of syntax and ergonomics. This will enable more ergonomic smart pointers for use in cross-language interop (e.g., references to objects in other languages like C++ or Python) and for low-level projects like Rust for Linux which use smart pointers to express particular data structures. -#### "Unblocking dormant traits" +### "Unblocking dormant traits" (((FLAGSHIP GOALS: Unblocking dormant traits))) @@ -50,7 +53,7 @@ Rust's trait system is one of its most powerful features, but it has a number of * The work to [expand Rust's `Sized` hierarchy](./scalable-vectors.md) will permit us to express types that are neither `Sized` nor `?Sized`, such as extern types (which have no size) or ARM's Scalable Vector Extensions (which have a size that is known at runtime, but not compilation time). This goal builds on [RFC #3729][] and [RFC #3838][], authored in previous project goal periods. * [In-place initialization](./in-place-initialization.md) allows creating structs and values that are tied to a particular place in memory. While useful directly for projects doing advanced C interop, it also unblocks expanding `dyn Trait` to support for `async fn` and `-> impl Trait` methods, as compiling such methods requires the ability for the callee to return a future whose size is not known to the caller. -#### "Flexible, fast(er) Rust builds" +### "Flexible, fast(er) Rust builds" (((FLAGSHIP GOALS: Flexible, fast(er) Rust builds))) @@ -59,7 +62,7 @@ The "Flexible, fast(er) Rust builds" initiative focuses on improving Rust's buil * We are improving compilation performance through (1) [parallel compilation in the compiler front-end](./parallel-front-end.md), which delivers 20-30% faster builds, and (2) [making the Cranelift backend production-ready for development use](./production-ready-cranelift.md), offering roughly 20% faster code generation compared to LLVM for debug builds. * We are working to [stabilize a core MVP of the `-Zbuild-std` feature](./build-std.md), which allows developers to rebuild the standard library from source with custom compiler flags. This unblocks critical use cases for embedded developers and low-level projects like Rust for Linux, while also enabling improvements like using sanitizers with the standard library or building `std` with debug information. -#### "Higher-level Rust" +### "Higher-level Rust" (((FLAGSHIP GOALS: Higher-level Rust))) @@ -68,7 +71,7 @@ People generally start using Rust for foundational use cases, where the requirem * We aim to stabilize [cargo script](./cargo-script.md), a feature that allows single-file Rust programs that embed their dependencies, making it much easier to write small utilities, share code examples, and create reproducible bug reports without the overhead of full Cargo projects. * We aim to finalize the design of [ergonomic ref-counting](./ergonomic-rc.md) and to finalize the experimental impl feature so it is ready for beta testing. Ergonomic ref counting makes it less cumbersome to work with ref-counted types like `Rc` and `Arc`, particularly in closures. -### Project goals +## Project goals The full slate of project goals are as follows. These goals all have identified points of contact who will drive the work forward as well as a viable work plan. The goals include asks from the listed Rust teams, which are cataloged in the [reference-level explanation](#reference-level-explanation) section below. @@ -79,12 +82,20 @@ The full slate of project goals are as follows. These goals all have identified # Reference-level explanation [reference-level-explanation]: #reference-level-explanation +## Goals broken out by champion + +Who is championing which goals? + +(((CHAMPIONS))) + +## Team asks + The following table highlights the asks from each affected team. The "owner" in the column is the person expecting to do the design/implementation work that the team will be approving. (((TEAM ASKS))) -### Definitions +## Definitions Definitions for terms used above: @@ -100,25 +111,39 @@ Definitions for terms used above: * Compiler [Major Change Proposal (MCP)](https://forge.rust-lang.org/compiler/mcp.html) is used to propose a 'larger than average' change and get feedback from the compiler team. * Library [API Change Proposal (ACP)](https://std-dev-guide.rust-lang.org/development/feature-lifecycle.html) describes a change to the standard library. -## Frequently asked questions +# Frequently asked questions -### How are project goals proposed? +## How are project goals proposed? **Project goals** are proposed bottom-up by a **point of contact**, somebody who is willing to commit resources (time, money, leadership) to seeing the work get done. The point of contact identifies the problem they want to address and sketches the solution of how they want to do so. They also identify the support they will need from the Rust teams (typically things like review bandwidth or feedback on RFCs). Teams then read the goals and provide feedback. If the goal is approved, teams are committing to support the point of contact in their work. -### Does accepting a goal mean that the work is going to happen for sure? +## What goals were not accepted? + +The following goals were not accepted as nobody stepped up to champion them. This should not be taken as a rejection of the underlying idea but likely indicates bandwidth constraints or concerns about scope. + +(((GOALS NOT ACCEPTED))) + +## Does accepting a goal mean that the work is going to happen for sure? No. Accepting a goal is not a promise to accept an RFC, stabilize a feature, or take any other binding action. Rather, it means that the team wants the goal to make progress and is committing to commit time to complete the Team Asks described in the goal. To give some concrete examples, when the compiler team accepts a goal, they are committing to make sure reviews get done, but they are not committing to give an `r+` if the code doesn't pass muster. Similarly, the lang team is agreeing to discuss an RFC and provide actionable feedback, but not necessarily to accept it. -### What is a "team champion"? What do they do? +## What is a "team champion"? What do they do? Team champions are people who have volunteered to track progress on the goal and to serve as a liaison between the goal owner(s) and the team. They are committing to support the owner to avoid the goal getting stuck in some kind of procedural limbo. For example, the goal champion might make sure the goal gets discussed in a meeting, or help to find a reviewer for a PR that is stuck in the queue. (In cases where the goal owner is also on the team, they can serve as their own champion.) -### Do goals have to have champions to be accepted? +# What do the column names like "Ded. r?" mean? + +[valid_team_asks]: #what-do-the-column-names-like-ded-r-mean + +Those column names refer to specific things that can be asked of teams: + +(((VALID TEAM ASKS))) + +## Do goals have to have champions to be accepted? Yes -- to be accepted, a goal needs some champions. They don't necessarily have to have a champion for *every team*, particularly not those with minor asks, but they do need to have enough champions that it seems the goal owner will be adequately supported. Those champions also need to not be too overloaded. -### How will we avoid taking on too many goals? +## How will we avoid taking on too many goals? That's a tough one. Part of the reason to have champions is to help us filter out goals -- if one champion has too many goals, or nobody is willing to champion the goal, that's a bad sign. diff --git a/src/2025h2/Rust-for-Linux-compiler.md b/src/2025h2/Rust-for-Linux-compiler.md index 7ea802ae..b4bec737 100644 --- a/src/2025h2/Rust-for-Linux-compiler.md +++ b/src/2025h2/Rust-for-Linux-compiler.md @@ -6,6 +6,7 @@ | Status | Proposed | | Tracking issue | [rust-lang/rust-project-goals#116] | | Zulip channel | [#t-compiler][channel-t-compiler], [#rust-for-linux][channel-rust-for-linux] | +| [compiler] champion | @WesleyWiser | [channel-t-compiler]: https://rust-lang.zulipchat.com/#narrow/channel/131828-t-compiler [channel-rust-for-linux]: https://rust-lang.zulipchat.com/#narrow/channel/425075-rust-for-linux diff --git a/src/2025h2/Rust-for-Linux-language.md b/src/2025h2/Rust-for-Linux-language.md index 0d7cbd4c..45c09f79 100644 --- a/src/2025h2/Rust-for-Linux-language.md +++ b/src/2025h2/Rust-for-Linux-language.md @@ -6,6 +6,9 @@ | Status | Proposed | | Tracking issue | [rust-lang/rust-project-goals#116] | | Zulip channel | [#t-lang][channel-t-lang], [#rust-for-linux][channel-rust-for-linux] | +| [lang] champion | @joshtriplett | +| [lang-docs] champion | @traviscross | + [channel-t-lang]: https://rust-lang.zulipchat.com/#narrow/channel/213817-t-lang [channel-rust-for-linux]: https://rust-lang.zulipchat.com/#narrow/channel/425075-rust-for-linux @@ -76,7 +79,6 @@ Which features get finished and stabilized depends on bandwidth and other constr | Finalize remaining work | @dingxiangfei2009 | | | Author Reference PR | @dingxiangfei2009 | | | Review/revise Reference PR | ![Team][] [lang-docs] | | -| Lang-team champion | ![Team][] [lang] | | | Author stabilization report | @dingxiangfei2009 | | | Author stabilization PR | @dingxiangfei2009 | | | Stabilization decision | ![Team][] [lang] | | diff --git a/src/2025h2/a-mir-formality.md b/src/2025h2/a-mir-formality.md index 8f8b54af..9f43231a 100644 --- a/src/2025h2/a-mir-formality.md +++ b/src/2025h2/a-mir-formality.md @@ -6,6 +6,8 @@ | Status | Proposed | | Tracking issue | [rust-lang/rust-project-goals#122] | | Zulip channel | N/A (an existing stream can be re-used or new streams can be created on request) | +| [types] champion | @nikomatsakis | + ## Summary Extend a-mir-formality with the ability to represent function bodies as MiniRust programs; a type checker based on the MIR type checker from the compiler; and a model that covers key parts of the the Polonius Alpha proposal. diff --git a/src/2025h2/autoreborrow-traits.md b/src/2025h2/autoreborrow-traits.md index 3e0a9446..4a668b62 100644 --- a/src/2025h2/autoreborrow-traits.md +++ b/src/2025h2/autoreborrow-traits.md @@ -1,12 +1,15 @@ # Nightly support for Autoreborrow traits -| Metadata | | -| :--------------- | -------------------------------------------------------------------------------- | -| Point of contact | @aapoalas | -| Status | Proposed | -| Flagship | Beyond the `&` | -| Tracking issue | | -| Zulip channel | N/A (an existing stream can be re-used or new streams can be created on request) | +| Metadata | | +| :------------------ | -------------------------------------------------------------------------------- | +| :--------------- | -------------------------------------------------------------------------------- | +| Point of contact | @aapoalas | +| Status | Proposed | +| Flagship | Beyond the `&` | +| Tracking issue | | +| Zulip channel | N/A (an existing stream can be re-used or new streams can be created on request) | +| [compiler] champion | @oli-obk | +| [lang] champion | @tmandry | ## Summary @@ -116,7 +119,6 @@ like `PhantomExclusive<'a>` and `PhantomShared<'b>` to discern the difference. | -------------------- | ---------------------------------- | ------------------------------------------------------------------- | | Lang-team experiment | ![Team][] [lang] | allows coding pre-RFC; only for trusted contributors | | Author RFC | *Goal point of contact, typically* | | -| Lang-team champion | ![Team][] [lang] | Username here | | RFC decision | ![Team][] [lang] | | | RFC secondary review | ![Team][] [types] | request bandwidth from a second team, most features don't need this | @@ -129,7 +131,6 @@ compiler already exists and could probably be reimagined to rely on a `Reborrow` | --------------------------------- | ---------------------------------- | ----- | | Implementation | *Goal point of contact, typically* | | | Standard reviews | ![Team][] [compiler] | | -| Lang-team champion | ![Team][] [lang] | | | Design meeting | ![Team][] [lang] | | | Author call for testing blog post | *Goal point of contact, typically* | | diff --git a/src/2025h2/build-std.md b/src/2025h2/build-std.md index 3bd13fe3..8e623cb2 100644 --- a/src/2025h2/build-std.md +++ b/src/2025h2/build-std.md @@ -1,12 +1,15 @@ # build-std -| Metadata | | -| :-- | :-- | -| Point of contact | @davidtwco | -| Status | Proposed | -| Flagship | Flexible, fast(er) Rust builds | -| Zulip channel | N/A | -| Tracking issue | [rust-lang/rust-project-goals#274] | +| Metadata | | +| :------------------ | :--------------------------------- | +| Point of contact | @davidtwco | +| Status | Proposed | +| Flagship | Flexible, fast(er) Rust builds | +| Zulip channel | N/A | +| Tracking issue | [rust-lang/rust-project-goals#274] | +| [cargo] champion | @ehuss | +| [compiler] champion | @davidtwco | +| [libs] champion | @Amanieu | ## Summary @@ -117,7 +120,7 @@ build-std feature. | Discussion and moral support | ![Team][] [cargo], [libs], [compiler] | @ehuss, @joshtriplett and @wesleywiser already regularly contribute | | Author RFC | @davidtwco, @adamgemmell | Continue draft produced in 2025H1 | | Design meeting | ![Team][] [cargo], [libs], [compiler] | Review initial RFC draft | -| RFC decision | ![Team][] [cargo], [libs], [compiler] | Decide to approve RFC. | +| RFC decision | ![Team][] [cargo], [libs], [compiler] | | | Implementation | @davidtwco, @adamgemmell | | | Standard reviews | ![Team][] [cargo], [libs], [compiler] | | diff --git a/src/2025h2/cargo-build-analysis.md b/src/2025h2/cargo-build-analysis.md index b0121a72..b9537fbf 100644 --- a/src/2025h2/cargo-build-analysis.md +++ b/src/2025h2/cargo-build-analysis.md @@ -6,6 +6,8 @@ | Status | Proposed | | Tracking issue | | | Zulip channel | N/A | +| [cargo] champion | @whlo | + ## Summary Prototype support for build analysis in Cargo by recording build metadata across invocations. diff --git a/src/2025h2/cargo-build-dir-layout.md b/src/2025h2/cargo-build-dir-layout.md index 82654ad1..414da33c 100644 --- a/src/2025h2/cargo-build-dir-layout.md +++ b/src/2025h2/cargo-build-dir-layout.md @@ -6,6 +6,7 @@ | Status | Proposed | | Tracking issue | | | Zulip channel | N/A (an existing stream can be re-used or new streams can be created on request) | +| [cargo] champion | @whlo | ## Summary Rework the Cargo build directory layout to have smaller self contained "units" diff --git a/src/2025h2/cargo-plumbing.md b/src/2025h2/cargo-plumbing.md index 186d7e48..b114de6d 100644 --- a/src/2025h2/cargo-plumbing.md +++ b/src/2025h2/cargo-plumbing.md @@ -7,6 +7,7 @@ | Zulip channel | N/A | | Tracking issue | [rust-lang/rust-project-goals#264] | +| [cargo] champion | @epage | ## Summary Create a third-party cargo subcommand that has "plumbing" (programmatic) diff --git a/src/2025h2/cargo-script.md b/src/2025h2/cargo-script.md index d922a21a..a936740b 100644 --- a/src/2025h2/cargo-script.md +++ b/src/2025h2/cargo-script.md @@ -7,6 +7,10 @@ | Flagship | Higher-level Rust | | Tracking issue | [rust-lang/rust-project-goals#119] | | Zulip channel | N/A (an existing stream can be re-used or new streams can be created on request) | +| [cargo] champion | @epage | +| [lang] champion | @joshtriplett | +| [lang-docs] champion | @joshtriplett | + ## Summary Stabilize support for "cargo script", the ability to have a single file that contains both Rust code and a `Cargo.toml`. @@ -69,7 +73,6 @@ Tracking issue [#136889](https://github.com/rust-lang/rust/issues/136889): | Rust-analyzer implementation | @epage | | | rustfmt implementation | @epage | | | Standard reviews | ![Team][] [compiler] | | -| Lang-team champion | ![Team][] [lang] | @joshtriplett | | Author call for testing blog post | @epage | | ### Stabilize language feature `frontmatter` @@ -78,7 +81,6 @@ Tracking issue [#136889](https://github.com/rust-lang/rust/issues/136889): | --------------------------- | --------------------- | ------------- | | Author Reference PR | @epage | | | Review/revise Reference PR | ![Team][] [lang-docs] | @ehuss | -| Lang-team champion | ![Team][] [lang] | @joshtriplett | | Author stabilization report | @epage | | | Author stabilization PR | @epage | | | Stabilization decision | ![Team][] [lang] | | diff --git a/src/2025h2/cargo-semver-checks.md b/src/2025h2/cargo-semver-checks.md index 571d68f5..c6b9e94b 100644 --- a/src/2025h2/cargo-semver-checks.md +++ b/src/2025h2/cargo-semver-checks.md @@ -6,6 +6,9 @@ | Status | Proposed | | Tracking issue | [rust-lang/rust-project-goals#104] | | Zulip channel | N/A | +| [cargo] champion | @epage | +| [rustdoc] champion | @adotinthevoid | + ## Summary Design and implement `cargo-semver-checks` functionality that lies on the critical path for merging the tool into cargo itself. Continues the work of [the 2025h1 goal][2025h1-goal]. diff --git a/src/2025h2/codegen_retags.md b/src/2025h2/codegen_retags.md index 5c934c45..44d5cf15 100644 --- a/src/2025h2/codegen_retags.md +++ b/src/2025h2/codegen_retags.md @@ -6,6 +6,10 @@ | Status | Proposed | | Tracking issue | | | Zulip channel | N/A | +| [compiler] champion | @RalfJ | +| [lang] champion | @tmandry | +| [opsem] champion | @RalfJ | + ## Summary Allow codegen backends to implement the MIR [`Retag`](https://doc.rust-lang.org/std/intrinsics/mir/fn.Retag.html) intrinsic, and add a similar intrinsic to the LLVM backend. @@ -49,7 +53,6 @@ We should avoid making changes that substantially impact any component of the co |--------------------------------|---------------------|-----------------------| | Implementation | @icmccorm | [proof-of-concept](https://github.com/Borrowsanitizer/rust) | | Author RFC | @icmccorm | | -| Lang-team champion | ![Team][] [lang] | @tmandry | | Design meeting | ![Team][] [opsem], [compiler] | | | Standard reviews | ![Team][] [opsem], [compiler] | | | Dedicated reviewer | ![Team][] [opsem], [compiler] | Most of our changes are within `rustc_codegen_ssa`, but it would also be helpful to have feedback from someone familiar with how retags are handled within Miri's [`borrow_tracker`](https://doc.rust-lang.org/nightly/nightly-rustc/miri/borrow_tracker/index.html) module. | diff --git a/src/2025h2/comprehensive-niche-checks.md b/src/2025h2/comprehensive-niche-checks.md index 830048b5..eff934fd 100644 --- a/src/2025h2/comprehensive-niche-checks.md +++ b/src/2025h2/comprehensive-niche-checks.md @@ -6,6 +6,8 @@ | Status | Proposed | | Tracking issue | [rust-lang/rust-project-goals#262] | | Zulip channel | https://rust-lang.zulipchat.com/#narrow/channel/435869-project-goals/topic/Null.20and.20enum-discriminant.20runtime.20checks.20in.20.28goals.23262.29/with/508256920 | +| [compiler] champion | @saethlin | +| [opsem] champion | @saethlin | ## Summary diff --git a/src/2025h2/const-generics.md b/src/2025h2/const-generics.md index f068e5c8..a1be56d5 100644 --- a/src/2025h2/const-generics.md +++ b/src/2025h2/const-generics.md @@ -6,6 +6,7 @@ | Status | Proposed | | Tracking issue | | | Zulip channel | N/A | +| [lang] champion | @nikomatsakis | ## Summary Work towards stabilizing the remaining const generics functionality that was left out of the original `min_const_generics` feature. diff --git a/src/2025h2/delegation.md b/src/2025h2/delegation.md index 9e5d61cc..c4d632a7 100644 --- a/src/2025h2/delegation.md +++ b/src/2025h2/delegation.md @@ -1,11 +1,12 @@ # Delegation -| Metadata | | -| :-- | :-- | -| Point of contact | @petrochenkov | -| Status | Proposed | -| Zulip channel | N/A | -| Tracking issue | [rust-lang/rust#118212] | +| Metadata | | +| :------------------ | :---------------------- | +| Point of contact | @petrochenkov | +| Status | Not accepted | +| Zulip channel | N/A | +| Tracking issue | [rust-lang/rust#118212] | +| [compiler] champion | @petrochenkov | ## Summary @@ -74,15 +75,14 @@ doesn't extend the syntactic budget. **Owner:** @petrochenkov -| Task | Owner(s) or team(s) | Notes | -|--------------------------------|----------------------|--------------------------------| -| Discussion and moral support | ![Team][] [lang] | | -| Author RFC | @petrochenkov | [RFC 3530] | -| Implementation | @bryanskiy, @petrochenkov | | -| Standard reviews | ![Team][] [compiler] | | -| Design meeting | ![Team][] [lang] | | -| Lang-team champion | ![Team][] [lang] | @traviscross | -| RFC decision | ![Team][] [lang] | | +| Task | Owner(s) or team(s) | Notes | +| ---------------------------- | ------------------------- | ---------- | +| Discussion and moral support | ![Team][] [lang] | | +| Author RFC | @petrochenkov | [RFC 3530] | +| Implementation | @bryanskiy, @petrochenkov | | +| Standard reviews | ![Team][] [compiler] | | +| Design meeting | ![Team][] [lang] | | +| RFC decision | ![Team][] [lang] | | [RFC 3530]: https://github.com/rust-lang/rfcs/pull/3530 [tracking issue]: https://github.com/rust-lang/rust/issues/118212 diff --git a/src/2025h2/ergonomic-rc.md b/src/2025h2/ergonomic-rc.md index 769b5f7e..1b3efbdf 100644 --- a/src/2025h2/ergonomic-rc.md +++ b/src/2025h2/ergonomic-rc.md @@ -7,6 +7,9 @@ | Flagship | Higher-level Rust | | Tracking issue | [rust-lang/rust-project-goals#107] | | Zulip channel | N/A | +| [compiler] champion | @spastorino | +| [lang] champion | @nikomatsakis | + ## Summary We propose to write an alternative RFC for ergonomic ref-counting that makes lightweight cloning automatic and hold design meetings so the lang team can compare both approaches. This work builds on RFC #3680, which proposed a new keyword, `use`, that could be used with closures (`use || ...`) and expressions like `x.use` to help address a longstanding problem: working with ref-counted data structures like `Arc` is verbose and confusing. @@ -146,7 +149,6 @@ The design axioms for this alternative RFC are as follows: | Author alternative RFC | @nikomatsakis | Seamlessly integrated approach | | Complete seamless implementation | @spastorino | Make `x` equivalent to `x.use` with optional linting | | Standard reviews | ![Team][] [compiler] | | -| Lang-team champion | @nikomatsakis | | | Design meeting | ![Team][] [lang] | Two meetings to evaluate both approaches | | RFC decision | ![Team][] [lang] | Choose between maximally additive vs seamlessly integrated | diff --git a/src/2025h2/evolving-traits.md b/src/2025h2/evolving-traits.md index 346aeb02..bac1f0cc 100644 --- a/src/2025h2/evolving-traits.md +++ b/src/2025h2/evolving-traits.md @@ -7,6 +7,8 @@ | Flagship | Unblocking dormant traits | | Tracking issue | | | Zulip channel | | +| [lang] champion | @cramertj | +| [types] champion | @oli-obk | ## Summary @@ -235,7 +237,6 @@ implementations. | Task | Owner(s) or team(s) | Notes | | ---------------------------- | -------------------- | -------------------------------------------------------------------- | | Discussion and moral support | ![Team][] [lang] | | -| Lang-team champion | @cramertj | | | Discussion and moral support | ![Team][] [compiler] | | | Discussion and moral support | ![Team][] [types] | | | Author RFC | @cramertj | | diff --git a/src/2025h2/field-projections.md b/src/2025h2/field-projections.md index 9a344bcd..cefe6cf2 100644 --- a/src/2025h2/field-projections.md +++ b/src/2025h2/field-projections.md @@ -1,12 +1,13 @@ # Design a language feature to solve Field Projections -| Metadata | | -|:-----------------|----------------------------------------------------------------------------------| -| Point of contact | @BennoLossin | -| Status | Proposed | -| Flagship | Beyond the `&` | -| Tracking issue | | -| Zulip channel | N/A | +| Metadata | | +| :--------------- | -------------- | +| Point of contact | @BennoLossin | +| Status | Proposed | +| Flagship | Beyond the `&` | +| Tracking issue | | +| Zulip channel | N/A | +| [lang] champion | @tmandry | ## Summary @@ -94,12 +95,11 @@ Have field projections available in stable Rust. ## Ownership and team asks -| Task | Owner(s) or team(s) | Notes | -|----------------------|-------------------------------------|---------------------------------------------------------------------| -| Design meeting | ![Team][] [lang] | Possibly more than one required as well as discussions on zulip. | -| Lang-team experiment | ![Team][] [lang] | @dingxiangfei2009, @BennoLossin | -| Author RFC | @BennoLossin | | -| Lang-team champion | ![Team][] [lang] | *Champion Needed* | -| RFC secondary review | ![Team][] [types] | might be a good idea? | -| RFC decision | ![Team][] [lang] | | +| Task | Owner(s) or team(s) | Notes | +| -------------------- | ------------------- | ---------------------------------------------------------------- | +| Design meeting | ![Team][] [lang] | Possibly more than one required as well as discussions on zulip. | +| Lang-team experiment | ![Team][] [lang] | @dingxiangfei2009, @BennoLossin | +| Author RFC | @BennoLossin | | +| RFC secondary review | ![Team][] [types] | might be a good idea? | +| RFC decision | ![Team][] [lang] | | ## Frequently asked questions diff --git a/src/2025h2/finishing-gpu-offload.md b/src/2025h2/finishing-gpu-offload.md index 1ccc4365..042fc064 100644 --- a/src/2025h2/finishing-gpu-offload.md +++ b/src/2025h2/finishing-gpu-offload.md @@ -7,6 +7,8 @@ | Tracking issue | [rust-lang/rust-project-goals#109] | | Other tracking issues | [rust-lang/rust#124509] | | Zulip channel | [#wg-autodiff][channel] | +| [compiler] champion | @ZuseZ4 | +| [lang] champion | @traviscross | [channel]: https://rust-lang.zulipchat.com/#narrow/channel/390790-wg-autodiff @@ -53,7 +55,6 @@ Authors of Machine Learning or Linear Algebra libraries will further be able to | Task | Owner(s) or team(s) | Notes | | -------------------- | ------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------ | | Lang-team experiment | ![Team][] [lang][] | ![Complete][] | -| Lang-team champion | ![Team][] [lang][] | @traviscross | | Standard reviews | ![Team][] [compiler] | Review contributions to `rustc_codegen_llvm` and other parts of the backend | | LLVM reviews | LLVM offload/GPU contributors | Individual contributors at AMD/NVIDIA/LLNL agreed to review my code from the LLVM or GPU side | | Do the work | @ZuseZ4 | | diff --git a/src/2025h2/gcc-backend-tests.md b/src/2025h2/gcc-backend-tests.md index fa8ca928..7c2b6a35 100644 --- a/src/2025h2/gcc-backend-tests.md +++ b/src/2025h2/gcc-backend-tests.md @@ -6,6 +6,9 @@ | Status | Proposed | | Tracking issue | [rust-lang/compiler-team#891] | | Zulip channel | [#rustc-codegen-gcc][rustc-codegen-gcc] | +| [compiler] champion | @WesleyWiser | +| [infra] champion | @marcoieni | + [rustc-codegen-gcc]: https://rust-lang.zulipchat.com/#narrow/channel/386786-rustc-codegen-gcc [rust-lang/compiler-team#891]: https://github.com/rust-lang/compiler-team/issues/891 diff --git a/src/2025h2/in-place-initialization.md b/src/2025h2/in-place-initialization.md index 7d7beac9..f52359d1 100644 --- a/src/2025h2/in-place-initialization.md +++ b/src/2025h2/in-place-initialization.md @@ -7,6 +7,8 @@ | Flagship | Unblocking dormant traits | | Tracking issue | | | Zulip channel | [#t-lang][channel] | +| [lang] champion | @cramertj | + [channel]: https://rust-lang.zulipchat.com/#narrow/channel/213817-t-lang ## Summary diff --git a/src/2025h2/interop-problem-map.md b/src/2025h2/interop-problem-map.md index 5d24b21d..8c3c13c0 100644 --- a/src/2025h2/interop-problem-map.md +++ b/src/2025h2/interop-problem-map.md @@ -6,6 +6,10 @@ | Status | Proposed | | Tracking issue | | | Zulip channel | [t-lang/interop](https://rust-lang.zulipchat.com/#narrow/channel/427678-t-lang.2Finterop) | +| [compiler] champion | @oli-obk | +| [lang] champion | @tmandry | +| [libs] champion | @dtolnay | + ## Summary Document a set of technical issues related to C++/Rust interoperability with broad community consensus to serve as a starting point for proposed solutions and facilitating cooperation among stakeholders in both language communities. diff --git a/src/2025h2/libtest-json.md b/src/2025h2/libtest-json.md index 18b6c1d1..1d14cd3d 100644 --- a/src/2025h2/libtest-json.md +++ b/src/2025h2/libtest-json.md @@ -6,6 +6,7 @@ | Status | Proposed | | Zulip channel | N/A | | Tracking issue | [rust-lang/rust-project-goals#255] | +| [cargo] champion | @epage | ## Summary diff --git a/src/2025h2/mir-move-elimination.md b/src/2025h2/mir-move-elimination.md index ea3e1587..cdb00639 100644 --- a/src/2025h2/mir-move-elimination.md +++ b/src/2025h2/mir-move-elimination.md @@ -6,6 +6,8 @@ | Status | Proposed | | Tracking issue | | | Zulip channel | N/A (an existing stream can be re-used or new streams can be created on request) | +| [lang] champion | @Amanieu | + ## Summary Add a MIR optimization which eliminates move operations. This will require changes to the MIR semantics of `move` to enable the optimization to cases where a value has had its address taken (LLVM already eliminates moves when this is not the case). diff --git a/src/2025h2/next-solver.md b/src/2025h2/next-solver.md index e1c98c7b..19aeaf53 100644 --- a/src/2025h2/next-solver.md +++ b/src/2025h2/next-solver.md @@ -7,6 +7,8 @@ | Flagship | Unblocking dormant traits | | Tracking issue | [rust-lang/rust-project-goals#113] | | Zulip channel | [#t-types/trait-system-refactor][channel] | +| [types] champion | @lcnr | + [channel]: https://rust-lang.zulipchat.com/#narrow/channel/364551-t-types.2Ftrait-system-refactor ## Summary diff --git a/src/2025h2/open-namespaces.md b/src/2025h2/open-namespaces.md index f6749c53..06bb1acd 100644 --- a/src/2025h2/open-namespaces.md +++ b/src/2025h2/open-namespaces.md @@ -6,6 +6,9 @@ | Status | Proposed for mentorship | | Zulip channel | N/A | | Tracking issue | [rust-lang/rust-project-goals#256] | +| [cargo] champion | @epage | +| [compiler] champion | @BN | +| [crates-io] champion | @carols10cents | ## Summary diff --git a/src/2025h2/parallel-front-end.md b/src/2025h2/parallel-front-end.md index f0d62a4c..8ccc1e6b 100644 --- a/src/2025h2/parallel-front-end.md +++ b/src/2025h2/parallel-front-end.md @@ -9,6 +9,7 @@ | See also | [rust-lang/rust#113349] | | Zulip channel | [#t-compiler/wg-parallel-rustc][channel] | +| [compiler] champion | @SparrowLi | [channel]: https://rust-lang.zulipchat.com/#narrow/channel/187679-t-compiler.2Fwg-parallel-rustc/ ## Summary diff --git a/src/2025h2/pin-ergonomics.md b/src/2025h2/pin-ergonomics.md index 9bba31c4..8c3dc97f 100644 --- a/src/2025h2/pin-ergonomics.md +++ b/src/2025h2/pin-ergonomics.md @@ -7,6 +7,9 @@ | Flagship | Beyond the `&` | | Tracking issue | | | Zulip channel | N/A (an existing stream can be re-used or new streams can be created on request) | +| [compiler] champion | @oli-obk | +| [lang] champion | @traviscross | + ## Summary Continue experimenting with and fleshing out the design and semantics for the pin ergonomics experiment. @@ -39,7 +42,6 @@ We have an experiment for improving the ergonomics around pinning and some initi | --------------------------------- | -------------------- | ----- | | Implementation | @frank-king | | | Standard reviews | ![Team][] [compiler] | | -| Lang-team champion | ![Team][] [lang] | | | Design meeting | ![Team][] [lang] | | | Author call for testing blog post | @frank-king | | diff --git a/src/2025h2/polonius.md b/src/2025h2/polonius.md index f401feff..e290b241 100644 --- a/src/2025h2/polonius.md +++ b/src/2025h2/polonius.md @@ -7,6 +7,7 @@ | Flagship | Unblocking dormant traits | | Tracking issue | [rust-lang/rust-project-goals#118] | | Zulip channel | [#t-types/polonius][channel] | +| [types] champion | @jackh726 | [channel]: https://rust-lang.zulipchat.com/#narrow/channel/186049-t-types.2Fpolonius ## Summary diff --git a/src/2025h2/production-ready-cranelift.md b/src/2025h2/production-ready-cranelift.md index a7e386f0..70c91349 100644 --- a/src/2025h2/production-ready-cranelift.md +++ b/src/2025h2/production-ready-cranelift.md @@ -8,6 +8,7 @@ | Tracking issue | | | Zulip channel | | +| [compiler] champion | @bjorn3 | ## Summary This project aims to get the rust cranelift codegen backend to a production-ready state. Specifically, with this work completed, we'd be confident to recommend it as the default for local development, e.g. with `cargo test` or `cargo run`. diff --git a/src/2025h2/pub-priv.md b/src/2025h2/pub-priv.md index 7f7fcf6d..f528f217 100644 --- a/src/2025h2/pub-priv.md +++ b/src/2025h2/pub-priv.md @@ -6,6 +6,7 @@ | Status | Proposed for mentorship | | Zulip channel | N/A | | Tracking issue | [rust-lang/rust-project-goals#272] | +| [cargo] champion | @epage | ## Summary diff --git a/src/2025h2/reference-expansion.md b/src/2025h2/reference-expansion.md index b7e1a6d0..1cbaad2d 100644 --- a/src/2025h2/reference-expansion.md +++ b/src/2025h2/reference-expansion.md @@ -6,6 +6,8 @@ | Status | Proposed | | Zulip channel | [#t-spec][channel] | | Tracking issue | | +| [lang-docs] champion | @joshtriplett | +| [spec] champion | @joshtriplett | [channel]: https://rust-lang.zulipchat.com/#narrow/channel/399173-t-spec diff --git a/src/2025h2/reflection-and-comptime.md b/src/2025h2/reflection-and-comptime.md index a39eb09d..b95f9a3e 100644 --- a/src/2025h2/reflection-and-comptime.md +++ b/src/2025h2/reflection-and-comptime.md @@ -6,6 +6,10 @@ | Status | Proposed | | Other Tracking issue | [rust-lang/rust#142577] | | Zulip channel | N/A (an existing stream can be re-used or new streams can be created on request) | +| [compiler] champion | @oli-obk | +| [lang] champion | @scottmcm | +| [libs] champion | @joshtriplett | + ## Summary Design, implement and experimentally land a reflection scheme based on `const fn` that can only be called at compile time. @@ -81,7 +85,6 @@ Create basic building blocks that allow `facet`, `bevy-reflect` and `reflect` to | Task | Owner(s) or team(s) | Notes | |----------------------|------------------------------------|---------------------------------------------------------------------| | Lang-team experiment | ![Team][] [lang], [libs] | Needs libstd data structures (lang items) to make the specialization data available | -| Lang-team champion | ![Team][] [lang] | TBD | ### Implement language feature @@ -91,7 +94,6 @@ Create basic building blocks that allow `facet`, `bevy-reflect` and `reflect` to |-----------------------------------|------------------------------------|-------| | Implementation | oli-obk | | | Standard reviews | ![Team][] [compiler] | | -| Lang-team champion | ![Team][] [lang] | | | Design meeting | ![Team][] [lang] | | | Author call for testing blog post | | Likely will just experiment with bevy or facet, no general call for testing | diff --git a/src/2025h2/relink-dont-rebuild.md b/src/2025h2/relink-dont-rebuild.md index 4498fbe8..df3d86eb 100644 --- a/src/2025h2/relink-dont-rebuild.md +++ b/src/2025h2/relink-dont-rebuild.md @@ -6,6 +6,8 @@ | Tracking issue | | | Zulip channel | | +| [cargo] champion | @whlo | +| [compiler] champion | @oli-obk | ## Summary Work towards avoiding rebuilds of a crate's dependents for changes that don't affect the crate's diff --git a/src/2025h2/rustc-perf-improvements.md b/src/2025h2/rustc-perf-improvements.md index 160911cb..1846e131 100644 --- a/src/2025h2/rustc-perf-improvements.md +++ b/src/2025h2/rustc-perf-improvements.md @@ -7,6 +7,8 @@ | Zulip channel | [#project-goals/2025h1/rustc-perf-improvements][channel] | | Tracking issue | [rust-lang/rust-project-goals#275] | +| [compiler] champion | @davidtwco | +| [infra] champion | @kobzol | [channel]: https://rust-lang.zulipchat.com/#narrow/channel/478771-project-goals.2F2025h1.2Frustc-perf-improvements *This goal will be primarily worked on by @Jamesbarford, but @davidtwco or diff --git a/src/2025h2/rustdoc-doc-cfg.md b/src/2025h2/rustdoc-doc-cfg.md index 5a2ced0a..292a4ee1 100644 --- a/src/2025h2/rustdoc-doc-cfg.md +++ b/src/2025h2/rustdoc-doc-cfg.md @@ -6,6 +6,7 @@ | Status | Proposed | | Tracking issue | [rust-lang/rust#43781] | | Zulip channel | [#t-rustdoc][t-rustdoc] | +| [rustdoc] champion | @imperio | [t-rustdoc]: https://rust-lang.zulipchat.com/#narrow/channel/266220-t-rustdoc ## Summary diff --git a/src/2025h2/rustdoc-team-charter.md b/src/2025h2/rustdoc-team-charter.md index bbc9bca0..55b51cd7 100644 --- a/src/2025h2/rustdoc-team-charter.md +++ b/src/2025h2/rustdoc-team-charter.md @@ -5,6 +5,7 @@ | Point of contact | @GuillaumeGomez | | Status | Proposed | | Zulip channel | [#t-rustdoc](https://rust-lang.zulipchat.com/#narrow/channel/266220-t-rustdoc) | +| [rustdoc] champion | @imperio | ## Summary Over the next six months, we will do the following: diff --git a/src/2025h2/scalable-vectors.md b/src/2025h2/scalable-vectors.md index 4e2f4263..a4ac4c5f 100644 --- a/src/2025h2/scalable-vectors.md +++ b/src/2025h2/scalable-vectors.md @@ -6,6 +6,9 @@ | Status | Proposed | | Zulip channel | N/A | | Tracking issue | [rust-lang/rust-project-goals#270] | +| [compiler] champion | @davidtwco | +| [lang] champion | @nikomatsakis | +| [libs] champion | @Amanieu | ## Summary diff --git a/src/2025h2/typesystem-docs.md b/src/2025h2/typesystem-docs.md index 05680d4d..c042bcac 100644 --- a/src/2025h2/typesystem-docs.md +++ b/src/2025h2/typesystem-docs.md @@ -6,6 +6,7 @@ | Status | Proposed | | Tracking issue | | | Zulip channel | N/A | +| [types] champion | @boxy | ## Summary Improve documentation of type system components to aide in types team onboarding and communication about changes to the type system . diff --git a/src/2025h2/unsafe-fields.md b/src/2025h2/unsafe-fields.md index 0bd3143c..fd8eace8 100644 --- a/src/2025h2/unsafe-fields.md +++ b/src/2025h2/unsafe-fields.md @@ -6,6 +6,8 @@ | Status | Proposed | | Zulip channel | N/A | | Tracking issue | [rust-lang/rust-project-goals#273] | +| [compiler] champion | @jackwrenn | +| [lang] champion | @scottmcm | ## Summary @@ -83,7 +85,6 @@ The design of `unsafe` fields is guided by three axioms: | Implementation | @veluca93, @jswrenn | | | Standard reviews | ![Team][] [compiler] | | | Design meeting | ![Team][] [lang] | | -| Lang-team champion | ![Team][] [lang] | @scottmcm | | RFC decision | ![Team][] [lang] | | Ongoing discussion on [Zulip]. diff --git a/src/TEMPLATE.md b/src/TEMPLATE.md index 0aaa1a46..13f6c3e1 100644 --- a/src/TEMPLATE.md +++ b/src/TEMPLATE.md @@ -70,7 +70,6 @@ |----------------------|------------------------------------|---------------------------------------------------------------------| | Lang-team experiment | ![Team][] [lang] | allows coding pre-RFC; only for trusted contributors | | Author RFC | *Goal point of contact, typically* | | -| Lang-team champion | ![Team][] [lang] | Username here | | RFC decision | ![Team][] [lang] | | | RFC secondary review | ![Team][] [types] | request bandwidth from a second team, most features don't need this | @@ -82,7 +81,6 @@ |-----------------------------------|------------------------------------|-------| | Implementation | *Goal point of contact, typically* | | | Standard reviews | ![Team][] [compiler] | | -| Lang-team champion | ![Team][] [lang] | | | Design meeting | ![Team][] [lang] | | | Author call for testing blog post | *Goal point of contact, typically* | | @@ -94,7 +92,6 @@ |-----------------------------|------------------------------------|-------| | Author Reference PR | *Goal point of contact, typically* | | | Review/revise Reference PR | ![Team][] [lang-docs] | | -| Lang-team champion | ![Team][] [lang] | | | Author stabilization report | *Goal point of contact, typically* | | | Author stabilization PR | *Goal point of contact, typically* | | | Stabilization decision | ![Team][] [lang] | |