---
title: Triage meeting 2021-04-27
tags: triage-meeting
---
# T-lang meeting agenda
* Meeting date: 2021-04-27
## Attendance
* Team members: nikomatsakis, cramertj, pnkfelix, scottmcm
* Others: simulacrum, Mara
## Meeting roles
* Action item scribe: simulacrum
* Note-taker: pnkfelix
## Scheduled meetings
- "New ABI: "wasm"" [lang-team#90](https://github.com/rust-lang/lang-team/issues/90)
- had the meeting!
- notes to be pushed
- "Generators planning" [lang-team#92](https://github.com/rust-lang/lang-team/issues/92)
- maybe no doc?
## Action item review
* [Action items list](https://hackmd.io/gstfhtXYTHa3Jv-P_2RK7A)
## Pending proposals
### "MCP: Allowing the compiler to eagerly drop values" lang-team#86
**Link:** https://github.com/rust-lang/lang-team/issues/86
* no progress, Niko still hopes to summarize
### "MCP: Change path attribute behavior of modules." lang-team#89
**Link:** https://github.com/rust-lang/lang-team/issues/89
* FCP to close, no significant discussion afterwards.
* One comment, pointing out there might be reasons to use paths around platform independence (which we did touch on in meeting itself)
## Nominated RFCs
### "add const-ub RFC" rfcs#3016
**Link:** https://github.com/rust-lang/rfcs/pull/3016
* looks like it can be merged
* who has permissions to merge?
* simulacrum: need to approve, then anyone from this team *should* have merge-capability
* pnkfelix takes action item to merge
## P-high issues on rust-lang/rust
### "`fn() -> Out` is a valid type for unsized types `Out`, and it implements `FnOnce<(), Output = Out>`" rust#82633
**Link:** https://github.com/rust-lang/rust/issues/82633
* There is a PR and I (niko?) prepared an alternative fix
### "Closures are unsound: 'static closures with non-'static return types." rust#84366
**Link:** https://github.com/rust-lang/rust/issues/84366
* Has a pending PR, under review
## Nominated PRs and issues on rust-lang/reference
No nominated items this time.
## Nominated PRs and issues on rust-lang/rust
### "Tracking issue for RFC 2345, "Allow panicking in constants"" rust#51999
**Link:** https://github.com/rust-lang/rust/issues/51999
* [Stablization Report](https://github.com/rust-lang/rust/issues/51999#issuecomment-826346762)
* I would prefer this to be accompanied by a stabilization PR, or at least in its own issue, shall we move it? -Niko
* lang team members should take action items to review this
### "Implement new lint for detecting buggy pointer-to-int casts" rust#81789
**Link:** https://github.com/rust-lang/rust/pull/81789
* [cramertj summarized old conversation](https://github.com/rust-lang/rust/pull/81789#issuecomment-827756314)
* no responses yet
* nothing to do here at this time
* lang team members should take action items to review cramertj's comment
* general impression: no consensus among team about going forward; little confidence in PR as written, but generally positive about doing *something* to try to improve things here
### "parser: Remove support for inner attributes on non-block expressions" rust#83312
**Link:** https://github.com/rust-lang/rust/pull/83312
* In FCP now
* [Aaron1011 left a comment](https://github.com/rust-lang/rust/pull/83312#issuecomment-825113447)
* (comment just says compiler has addressed some of the problems, but there is still value in removing them)
* cramertj: is this actually a breaking change, when you consider when these might fall under a cfg'ed section of code? (Or more generally, a part of the code that is dropped e.g. via macro expansion)
```rust=
macro_rules! foo {
($foo:expr) => { }
}
fn main() {
foo!((#![foo] 22));
}
```
* notably, the above (with a `(#![foo] 22)` being passed into a macro that takes a `$foo:expr`) compiles today on stable and we are pretty sure it will stop compiling after this change.
* simulacrum: For what its worth, `rustfmt` "eats" the inner attribute in that context. (So it won't even be preserved via `rustfmt`'s transformation.)
4 unique legitimate regressions:
- `match port { #![allow(clippy::cast_ptr_alignment)] ... }`
- ``match self.color { //! The `format!()` [macro] lets us create a `String` with a pattern, ... }``
- `match *self { #![allow(unknown_lints,match_same_arms)] ... }`
- `match mdid { #![allow(clippy::unreadable_literal)] }`
* Based on above comment from petrochenkov (which we believe is referring to code snippets that compile today on stable rust), it sounds like we don't need to go through a macro to observe the breaking change here.
* This compiles on stable, with a warning that the `#[doc]` attribute is unused: https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=b6f83b33ead1fcc59d4ea4a48fd5fea1
```rust=
fn main() {
let color = 4;
match color {
//! The `format!()` [macro] lets us create a `String` with a pattern, ...
_ => (),
}
}
```
* simulacrum: if this helps compiler performance on 99% of the code, and it doesn't have a meaningful interpretation today
* nikomatsakis/cramertj: it has a meaningful interpretation to me...
* simulacrum: well in any case, it seems like it might be worth it?
* nikomatsakis: Is the motivation here performance? I had thought maybe it was something else, i.e. that it wasn't correctly implemented today?
* nikomatsakis: I'm going to leave a concern noting that I am not clear on motivation
* scottmcm: how bad would it be to accept these but ignore them and emit a diagnostic saying that they have no meaning?
* various: why not just support them then?
Example: this works (lint is suppressed)
```rust=
fn main() {
let x = Some(22);
match x {
#![allow(unused_variables)]
Some(y) => { }
None => { }
}
}
```
### "Stabilize extended_key_value_attributes" rust#83366
**Link:** https://github.com/rust-lang/rust/pull/83366
* question about arbitrary expressions. PR stabilizes lexing arbitrary expressions in that position.
* nikomatsakis: why is that a concern for lang team? perhaps hygiene?
* nikomatsakis: generally feel like it should be okay to allow arbitrary expressions
* cramertj: should we worry that these macro invocations *look* like things that are expanded eagerly?
* cramertj: but `doc = ...` and `path = ...` "just work" via compiler-magic.
* nikomatsakis: right, they are not macros. (Though maybe they could become macros in the future.)
* cramertj: just concerned that someone might think they can use some macros here and think that they will be expanded eagerly.
* cramertj; Having this feature and *not* having eager expansion just feels funny to me.
* nikomatsakis: (do procedural macros accept that form?)
* cramertj: (yes. I think. E.g. parsing equals of attributes attached to fields)
* nikomatsakis: but what about the macro invocation itself?
* cramertj: oh I don't think those would work in a procedural macro (today).
```rust=
#[derive(StructOpt)]
struct Foo {
#[data = include_str!(...)]
field: u32
}
```
* but this example *would* work because string is only needed at runtime
* what would not work is if the string is needed at *compile time*
* scottmcm: does this allow, say, `#[foo = +(3)]` since that could tokenize fine but isn't an expression?
* Should it be `tt*` or actually `expr`?
* niko's "theory": arbitrary tokens will lex, but not parse, but let's discuss it in thread
* nikomatsakis: seems like it parses the expression
* mara: the `StructOpt` example above does not actually work today
### "Stabilize `:pat_param` but leave `:pat2021` gated" rust#83386
**Link:** https://github.com/rust-lang/rust/pull/83386
* settled on "pat_param" as a name, but still deciding about whether to provide "pat2021"
* mara: point of keyword literals is to enable people to write expected keywords without waiting for an edition, not about adding it after the edition is available.
* joshtriplett: providing a pat2021 is motivated by wanting to allow future editions to make further changes to what `pat` means, and since we do not know what those changes are today, the only thing we can call it is `pat2021`
* mara: that sounds like an argument for not having `pat2021` at all
* joshtriplett: it is an argument if you want to write references to `pat2021` in 2015 or 2018 edition code.
* nikomatsakis: felix has often argued for always having a *way* to specify what you want, even if you rarely use it
* scottmcm: does it suffice to say "we give you a way, but only in the latest edition"?
* (debate followed)
* mara: Note that `$($_:pat_param)|+` works in all editions
* Agreed:
* pat_param -- pat without `|`
* pat -- pat without `|` <=2018, pat with `|` 2021+
* Question:
* do we have pat2021 that is 'pat with `|`' in all editions
* Reason to do so:
* It is nice if older editions can access newer semantics, albeit with a more confusing way
* Reasons not to do so:
* (a) they can acccess the newer semantics by doing `$($p:pat)|+` (or by upgrading to the newer edition)
* But: this is significant more complex and they may well make a subtle mistake
* But: macros do this today
* But: why not adopt newer edition? probably because want support for old compiler
* (b) newer editions have no use for this because it's just the same as `pat`
* (c\) if we add a new variant of pat, we can give it a meaningful name like `pat_param` at that time
* (d) cruft, YAGNI
* It would be a shame if we ended up with a big list of `pat2021`, `pat2027`, ...
* Precedent:
* we tend to give years for 'old names that are deprecated but retained for backwards compat'
### "`#[repr(align(8))]` is not accepted for arrays" rust#83595
**Link:** https://github.com/rust-lang/rust/issues/83595
* putting `#[repr(align)]` on a field was accepted but did nothing
* now rejected
* scott thinks we agreed to this breakage before, so does mark
* action item: scott to leave comment
breakage discussion: https://github.com/rust-lang/rust/pull/80920#issuecomment-771901110
### "Stabilize "RangeFrom" patterns" rust#83918
**Link:** https://github.com/rust-lang/rust/pull/83918
### "Deny float matches" rust#84045
**Link:** https://github.com/rust-lang/rust/pull/84045
### "exploration: ignoring arrays in method dispatch" rust#84133
**Link:** https://github.com/rust-lang/rust/issues/84133
### "Add `expr202x` macro pattern" rust#84364
**Link:** https://github.com/rust-lang/rust/pull/84364
### "Allow struct and enum to contain inner attrs" rust#84414
**Link:** https://github.com/rust-lang/rust/pull/84414