---
title: Triage meeting 2022-11-01
tags: triage-meeting
---
# T-lang meeting agenda
* Meeting date: 2022-11-01
## Attendance
* Team members: Josh, Niko, Felix
* Others: Mark, dtolnay, Nilstrieb, y86-dev, Tyler Mandry, Vincent
## Meeting roles
* Action item scribe: Mark
* Note-taker: Mark
## Scheduled meetings
- No pending proposals this time.
- Design meeting -- planning meeting tomorrow (2022-11-02).
## Announcements or custom items
(Meeting attendees, feel free to add items here!)
## Action item review
* [Action items list](https://hackmd.io/gstfhtXYTHa3Jv-P_2RK7A)
## Pending lang team project proposals
None.
## PRs on the lang-team repo
### "Fix link and newlines in meeting proposal template." lang-team#180
**Link:** https://github.com/rust-lang/lang-team/pull/180
## RFCs waiting to be merged
None.
## Proposed FCPs
**Check your boxes!**
### "Remove drop order twist of && and || and make them associative" rust#103293
- **Link:** https://github.com/rust-lang/rust/pull/103293
- [**Tracking Comment**](https://github.com/rust-lang/rust/pull/103293#issuecomment-1293411354):
> Team member @joshtriplett has proposed to merge this. The next step is review by the rest of the tagged team members:
>
> * [ ] @cramertj
> * [x] @joshtriplett
> * [ ] @nikomatsakis
> * [ ] @pnkfelix
> * [ ] @scottmcm
>
> Concerns:
>
> * ~~consistency-with-if-let~~ resolved by https://github.com/rust-lang/rust/pull/103293#issuecomment-1293451766
>
> Once a majority of reviewers approve (and at most 2 approvals are outstanding), this will enter its final comment period. If you spot a major issue that hasn't been raised at any point in this process, please speak up!
>
> See [this document](https://github.com/rust-lang/rfcbot-rs/blob/master/README.md) for info about what commands tagged team members can give me.
- [**Initiating Comment**](https://github.com/rust-lang/rust/pull/103293#issuecomment-1293411326):
> @rfcbot merge
>
> @rfcbot concern consistency-with-if-let
> Per https://github.com/rust-lang/rust/pull/103293#issuecomment-1293408574
## Active FCPs
### "Short Macro Invocation Syntax: m!123 and m!"abc"" rfcs#3267
**Link:** https://github.com/rust-lang/rfcs/pull/3267
### "Support upcasting of `dyn Trait` values" rfcs#3324
**Link:** https://github.com/rust-lang/rfcs/pull/3324
### "Add lang-team advisors team" rfcs#3327
**Link:** https://github.com/rust-lang/rfcs/pull/3327
### "Use `token::Lit` in `ast::ExprKind::Lit`." rust#102944
**Link:** https://github.com/rust-lang/rust/pull/102944
## P-critical issues
None.
## Nominated RFCs, PRs and issues discussed this meeting
### "Parse error recovery is obversable by macros in several cases" rust#103534
**Link:** https://github.com/rust-lang/rust/issues/103534
- Nilstrieb: originally a compiler issue. Macro matching can vary depending on if parser does recovery.
- https://github.com/rust-lang/rust/issues/103534#issuecomment-1291035057 has two code blocks that should (or should not) compile
```rust
macro_rules! blah {
($expr:expr) => {};
(not $expr:expr) => {};
}
fn main() {
blah!(not 1);
}
```
* `not 1` is "recovery" parsed as a 'broken' expr "token".
```rust=
macro_rules! what {
($e:expr) => { compile_error!("no") };
($($tt:tt)*) => {};
}
fn wh() {
what! {
match 1;
}
}
```
```rust=
macro_rules! x {
(a b) => {};
(a c) => {};
}
x! { a c }
```
* Neither of these code blocks compile today.
* Question: Should these work?
* Each arm is matched until it fails, and then the next one is tried
* However, if the arm has a NT (e.g., expr), then whether this arm is used is based only on the first token being in the 'start set' of the NT.
* If that fails, then the whole macro invocation fails to compile -- no fallback to next arm.
* Niko: originally, one of the alternative design was to conservatively 'expand' the scope of NTs to some rough grammar, but then actually parse with current expr
* Probably can't adopt this today. But maybe we should be taking an opportunity to expose less of the grammar...
* Josh: Can we do something partial, incremental today? Like not applying parser recovery here?
* Niko: I *do* think that the first macro (with not $expr) shouldn't work in the fullness of time (i.e., that's the kind of thing that exposes the details of our expr grammar)
* But I agree we should probably avoid parser recovery now anyway. That's how the system works now...
* Josh: In the past we did pat_or to extend here. Maybe we fix this long-term the same way.
* Josh: Do we need an FCP to determine that error recovery shouldn't play a role here?
* Seems like the answer is 'no', this (error recovery playing a role) is just a compiler bug.
* Felix: Is the feedback that we want both to work right? Long-term Niko at least seems like we want something different.
* Niko: I think this is a bug relative to the current behavior; lang would be open to RFCs/proposals/exploratory work changing the status quo (over e.g. edition boundaries).
### "Unreserve braced enum variants in value namespace" rust#103578
**Link:** https://github.com/rust-lang/rust/pull/103578
* https://github.com/rust-lang/rust/pull/103578#issuecomment-1292594900
* Seems like no current plans
* Josh: Seems like we could have some kind of mem::discriminant on 'unfilled' enums, rather than requiring dummy values
* Josh: We would need an edition to get this back, but seems fine.
* Starting an FCP merge.
### "update aliasing rules section of the reference" reference#1290
**Link:** https://github.com/rust-lang/reference/pull/1290
* Niko: A function with &T argument can assume the &T starts and stays valid during its execution
* Josh: But you can temporarily make it dangling?
* Niko: No, I don't think so. You might be able to 'uninitialize' the memory it points to?
> For references, the liveness duration is upper-bounded by the syntactic lifetime assigned by the borrow checker.
* Josh: Not sure what this means.
* Niko: I think this means that the reference isn't living *longer* than what the borrow checker dictates. Something like "replacing all pointers with references" is *good enough* (if it works). It not working is not necessarily indicative of problems though.
* Niko: I think the goal here is to give minimal area rather than an actual definiton we *want*.
* Josh: https://github.com/rust-lang/rfcs/pull/3336, seems like should be considered together?
* Mark: No, seems like these are very separable. The reference PR documents what is *true* today.
* Josh: It seems like we ought to not document something as UB unless we're *also* providing an alternative.
* Josh: Suppose:
* Would it be legal to take a &mut, turn it into a *mut, free it, reallocate something at the same address, and then use the &mut?
* Josh: It seems like the letter of the reference says this is illegal, but I think this "should" be fine.
* Nilstrieb: Stacked borrows says this is illegal today.
* Niko: In async context, we want to reuse stack memory after moving out, so I do think we should draw some lines. Maybe can relax later.
* Josh: I think you're saying that we should write these rules and then I can write an RFC to avoid giving these hints.
* Josh: I believe people are making things temporarily invalid today?
* What does *dangling* mean?
* It's not well-defined here.
* Mark: It seems like if we ask for an exact definition we get a 100 page thesis.
* Niko: I agree with Mark that right line is hard to find, but seems like we ought to be able to give some guidance.
* For example, LLVM has a fairly specific definition.
* At least can note this is a point of confusion.
* Josh: No objections to documenting current behavior (and considering future extensions)
* y86: Note that dangling is defined in the doc (see rendered link).
* Felix: Josh, what is the layout/visiblity/details of the T in &mut T? When people are doing this?
* Josh: e.g. &mut [u8]
* Felix: Asking to avoid being unable to fulfill between Niko's async example and this case.
* Josh: .... something about moving these in different directions ...
* Niko: Would like some consensus on what we do with this PR
* Forward-ref to the dangling definiton
* ...
* Josh: If we're just documenting the current state and we can change it in the future, then seems OK.
* rfcbot merge planned (to be started by Niko)
### "Restrictions" rfcs#3323
**Link:** https://github.com/rust-lang/rfcs/pull/3323
* Will discuss in a bit...
* Jacob won't join us today.
* Josh: Proposal gives us sealed traits and read-only fields.
* Is there anything we can do better?
* `pub mut(self) field: type` -- this is publicly read-only
* this is relatively verbose, so maybe
* Mark: Do we really want to answer this question *now*?
* Josh: It seems like we shouldn't treat *this* RFC as experimental, since the work isn't really in surface syntax.
* Niko: "Let's land this, but let's still dive into some more experimentation with syntax".
* Not really clear what the experimentation looks like.
* Don't really like *this* syntax, but not sure I have alternatives either at this time.
* Josh to propose fcp, can sort out via concerns/comments.
## Nominated RFCs, PRs and issues NOT discussed this meeting
### "RFC: Field projection" rfcs#3318
**Link:** https://github.com/rust-lang/rfcs/pull/3318
### "impl DispatchFromDyn for Cell and UnsafeCell" rust#97373
**Link:** https://github.com/rust-lang/rust/pull/97373
### "PhantomData: fix documentation wrt interaction with dropck" rust#103413
**Link:** https://github.com/rust-lang/rust/pull/103413