Repository navigation
Tracking Issue for match ergonomics 2024 (RFC 3627) #123076
Copy link
Copy link
Open
Labels
A-patternsRelating to patterns and pattern matchingRelating to patterns and pattern matchingB-RFC-approvedBlocker: Approved by a merged RFC but not yet implemented.Blocker: Approved by a merged RFC but not yet implemented.B-unstableBlocker: Implemented in the nightly compiler and unstable.Blocker: Implemented in the nightly compiler and unstable.C-tracking-issueCategory: An issue tracking the progress of sth. like the implementation of an RFCCategory: An issue tracking the progress of sth. like the implementation of an RFCT-langRelevant to the language teamRelevant to the language team
Description
This is a tracking issue for changes to match ergonomics for the 2024 edition, as described in rust-lang/rfcs#3627.
About tracking issues
Tracking issues are used to record the overall progress of implementation.
They are also used as hubs connecting to other relevant issues, e.g., bugs or open design questions.
A tracking issue is however not meant for large scale discussion, questions, or bug reports about a feature.
Instead, open a dedicated issue for the specific matter and add the relevant feature gate label.
Steps
-
mut ref/mut ref mut(#![feature(mut_ref)]) Match ergonomics 2024: implement mutable by-reference bindings #123080- Bikeshed (
ref (mut/ref mut (mut?) - Update all pattern diagnostics to ensure they know about this
- Bikeshed (
- Changes to
&and&mutpatterns (#![feature(ref_pat_eat_one_layer_2024, ref_pat_eat_one_layer_2024_structural)]) Match ergonomics 2024: Implement eat-one-layer #123512 - Allow
&patterns to consume&mutreferences Match ergonomics 2024: let&patterns eat&mut#124567 - Don't reset binding mode on
mutwith edition >= 2024 Match ergonomics 2024:mutdoesn't reset binding mode #123535- Edition migration lint (without rustfix)
- Rustfix Match ergonomics 2024: migration lint #124639
- RFC Match ergonomics 2024 rfcs#3627
- Original design doc: https://hackmd.io/YLKslGwpQOeAyGBayO9mdw.
- N/A: Add documentation to the dev guide.
- See the instructions.
- Stabilize Rule 1C, Rule 2C for Rust 2024.
- Stabilize Rules 3-5 for all editions.
- Add documentation to the reference.
- See the instructions.
- Add documentation to the edition guide.
- Ensure ready for Rust 2024 stabilization.
Tracking for Rust 2024 changes:
Unresolved Questions
mut ref mutvsref mut (mutsyntax- The HackMD says the reference types should be "compatible", what does this mean and why?
### Implementation history
- [ ] https://github.com/rust-lang/rust/pull/122978
- [ ] https://github.com/rust-lang/rust/pull/123080
- [ ] https://github.com/rust-lang/rust/pull/123311
- [ ] https://github.com/rust-lang/rust/pull/123512
- [ ] https://github.com/rust-lang/rust/pull/123535
- [ ] https://github.com/rust-lang/rust/pull/124047
- [ ] https://github.com/rust-lang/rust/pull/124567
- [ ] https://github.com/rust-lang/rust/pull/124639
- [ ] https://github.com/rust-lang/rfcs/pull/3627
- [ ] https://github.com/rust-lang/rust/issues/125058
- [ ] https://github.com/rust-lang/rust/pull/125084
- [ ] https://github.com/rust-lang/rust/pull/125168
- [ ] https://github.com/rust-lang/rust/pull/127008
- [ ] https://github.com/rust-lang/rust/issues/127257
- [ ] https://github.com/rust-lang/rust/pull/127369
- [ ] https://github.com/rust-lang/rust/issues/127559
- [ ] https://github.com/rust-lang/rust/pull/135237
@rustbot label T-lang A-patterns A-edition-2024
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
A-patternsRelating to patterns and pattern matchingRelating to patterns and pattern matchingB-RFC-approvedBlocker: Approved by a merged RFC but not yet implemented.Blocker: Approved by a merged RFC but not yet implemented.B-unstableBlocker: Implemented in the nightly compiler and unstable.Blocker: Implemented in the nightly compiler and unstable.C-tracking-issueCategory: An issue tracking the progress of sth. like the implementation of an RFCCategory: An issue tracking the progress of sth. like the implementation of an RFCT-langRelevant to the language teamRelevant to the language team
Activity
Nadrieril commentedon Mar 26, 2024
Noting here that I no longer think we need the "
&<pat>everywhere" part of the proposal. This makes the proposed fix less local but saves us in design and possible conflicts with deref patterns.Jules-Bertholet commentedon Mar 26, 2024
Can you elaborate?edit: oh I see, https://hackmd.io/YLKslGwpQOeAyGBayO9mdw#Deref-patternstraviscross commentedon Mar 26, 2024
@rustbot labels +I-lang-nominated
@Jules-Bertholet has picked up this work and is looking for a liaison for the experiment. Let's nominate to discuss.
traviscross commentedon Mar 27, 2024
@rustbot labels -I-lang-nominated
We discussed this is in the lang meeting today, and I'll be picking up liaisoning on this one. Please let me know whenever anything is needed to move this forward.
Thanks to @Nadrieril for the original work here, and thanks to @Jules-Bertholet for carrying the torch forward.
Auto merge of rust-lang#123080 - Jules-Bertholet:mut-ref-mut, r=Nadri…
Auto merge of rust-lang#123080 - Jules-Bertholet:mut-ref-mut, r=Nadri…
Rollup merge of rust-lang#123311 - Jules-Bertholet:andpat-everywhere,…
Rollup merge of rust-lang#123311 - Jules-Bertholet:andpat-everywhere,…
Unrolled build for rust-lang#123311
80 remaining items
Unrolled build for rust-lang#137358
Rust 1.79.0: Enable new rustc lints
Rust 1.79.0: Enable new rustc lints
joshtriplett commentedon Jan 21, 2026
What is the current state of this feature? Is it ready for a stabilization report?
joshtriplett commentedon Jan 21, 2026
Also, one open question that came up in today's lang meeting: should this be
mut ref xormut (ref x)?traviscross commentedon Jan 21, 2026
The open question was choosing between:
mut ref x,mut ref mut xmut (ref x),mut (ref mut x)ref (mut x),ref mut (mut x)Nadrieril commentedon Jan 24, 2026
For those wondering, the open question for this whole tracking issue was most importantly choosing between the structural-based rules and the type-based rules. Consensus seemed to be roughly aligned with the type-based approach when we last talked about this (was that a year ago? damn). However the recent work on field projections is putting that into question again, so I'm waiting for that to get fleshed out before reviving this initiative.
Rollup merge of rust-lang#151102 - zachs18:mut-ref-in-struct-pattern-…
Rollup merge of rust-lang#151102 - zachs18:mut-ref-in-struct-pattern-…
Unrolled build for #151102
Auto merge of #127008 - Jules-Bertholet:tc-ergonomics, r=Nadrieril
rust195: Add a package for rust 1.95.0.
feat(deps): update dependency rust (#4)
build(deps): update rust to v1.95.0