owned this note
owned this note
Published
Linked with GitHub
---
title: Triage meeting 2021-06-01
tags: triage-meeting
---
# T-lang meeting agenda
* Meeting date: 2021-06-01
## Attendance
* Team members: Niko, Josh, Scott
* Others: Mara, simulacrum
## Meeting roles
* Action item scribe: simulacrum
* Note-taker: nikomatsakis
## Scheduled meetings
- Planning meeting tomorrow!
## Action item review
* [Action items list](https://hackmd.io/gstfhtXYTHa3Jv-P_2RK7A)
## Pending lang team project proposals
### "MCP: Allowing the compiler to eagerly drop values" lang-team#86
**Link:** https://github.com/rust-lang/lang-team/issues/86
* Niko [generated raw notes](https://hackmd.io/6tR_rMWeS1SGAnX9R_Bc8A), will try to coallesce
## PRs on the lang-team repo
Meta-discussion about open PRs.
* Question: Do these represent consensus?
* These don't represent consensus around a particular design (that would be an RFC)
* "Consensus" (or at least agreement) that they accurately represent the conversations
* Response should just be to add
* "Does everyone feel their points are represented?"
* Seems excessive. We will have this discussion later.
* Mark: I think having a lang team member look it over and say "seems all right" is good enough, they are ultimately a living document.
* Someone can always make a PR with more.
* Josh: my concern is that part of the point of this RFC is to to make sure positions don't get lost by the time an RFC comes up
* We've sometimes had years pass.
* Niko: Let's document the purpose ("these aim to capture design points, considerations, and don't represent consensus around a particular design")
* and then assign to a person to merge when they feel ready
* Mark: some of these have been open since Oct 2020!
* having them get merged quickly will be more beneficial than having them sit around
* Josh: may make sense to spend a bit of time in meeting
* Mark: Scratch proposal:
* I would file an issue to use a design meeting and spend some time this month to catch up
* Josh: I do see value in having a lang team member to review it (also not the author)
* Rough consensus:
* Steady state process is to assign a lang-team reviewer (not author) to read and bring to the meeting
* For the current state, we can use a design meeting to accelerate
## Proposed FCPs
**Check your boxes!**
### "Type-changing struct update syntax" rfcs#2528
**Link:** https://github.com/rust-lang/rfcs/pull/2528
* Blocked on Niko, basically ready to review
* Niko to resolve concern, we can work out the inference details during implementation
### "Calling methods on generic parameters of const fns" rfcs#2632
**Link:** https://github.com/rust-lang/rfcs/pull/2632
* Maybe related to const generics vision doc work
* Can't remember what we expected to do here...?
* Mark: I think I had suggested that we just close this and have the project group re-open it
* Josh: the ask may have evolved
* we should be abundantly clear that this is not a negative, it's discouraging to start a new thread
* Niko: I think it's oli? I can talk to him
* In some cases, those things are currently stabilized
### "RFC: Supertrait item shadowing" rfcs#2845
**Link:** https://github.com/rust-lang/rfcs/pull/2845
* Niko has a concern that comes down to feeling uncomfortable with the fact that the specific bounds we use will become significant versus the elaborated bounds
* I'm probably willing to resolve it
* Josh: You don't have to drop it, I'd like to know if there's a path forward
```rust=
trait Super { type A; }
trait Sub: Super { type A; }
fn foo<T: Sub>() {
T::A // <T as Sub>::A, ambiguity warning
}
fn foo<T: Sub + Super>() {
T::A // ambiguity error
}
```
* Question:
* Is it an error or a warning if you create ambiguity?
* Answer:
* Yes, but it would change from "always error" (today) to "error if called"
* Niko: I will re-read the RFC today but I'm particularly ok with ambiguity errors as it's an "obviously ok" step forward, and we can potentially do more later
* I was a bit uncomfortable with `T: Sub` being distinct from `T: Sub + Super` because that's not something that something that is significant today
* (Although I think it may be the right design)
* Josh: To be clear, we're not changing inherent vs trait method resolution, right?
* All: Right
* Scott: Based on a quick read of the RFC, I think this is the conservative version that Niko said they were ok with
* Niko to resolve concern (already done!)
Directly from RFC (including the comment):
```
trait Super {
fn foo(&self);
}
trait Sub: Super {
fn foo(&self);
fn bar(&self) {
// Is and will continue to be an error
self.foo();
}
}
```
### "RFC: Add `target` configuration" rfcs#2991
**Link:** https://github.com/rust-lang/rfcs/pull/2991
* Niko has a [concern to add something to the alternatives](https://github.com/rust-lang/rfcs/pull/2991#issuecomment-720491222)
* Alternative `#[cfg(target(arch="aarch64", os="none"))]`
* Equivalent to `#[cfg(all(target_arch="aarch64", target_os="none"))]`
* Josh: I feel like the main reason to want this is to match wasm32-unknown-unknown because it has no proper std
* But that seems like a specific special case, adding this just for that doesn't seem worthwhile
* ehuss raised concerns that full target matching is actually an anti-pattern
* josh: I'd prefer the shorthand, which would also permit people to be less specific ("is this wasm")
* scott: why does wasm have std anyway?
* josh: it does have a useful subset of std, and wasi didn't exist at the time, so this seemed practical
* ideally they'd use nice portability to provide a *subset* of std, but that's not a thing right now
* scott: are we stuck with this because back compat?
* mara: probably yes. things are stubbed out and panic.
* mark: it's also not a tier 1 target, we'd have to phase it out carefully, but that's an option
* josh: we could, but wasm with no operating system *is* a thing a number of people use. The question is mostly whether it should have stubs or no functions.
* scott: I'm less interested in this feature if the main use case is "wasm32-unknown-unknown" and we're not a big fan of this
* josh: right, I'm not seeing people specifically request it for other targets
* josh: what process? should I raise a concern, cancel FCP?
* niko: this has been going on for a while, registering a concern is nice but I'm also ok canceling the FCP
* don't know what other people think
* could ultimately do `target(full = "...")` if we *really* wanted to enable the full string
### "Tracking issue for RFC 2523, `#[cfg(version(..))]`" rust#64796
**Link:** https://github.com/rust-lang/rust/issues/64796
* Currently stalled:
* Josh is still concerned that we don't have any *other* feature detection mechanism available.
* Continued discussion about how narrow it can be.
* Seems to be a proposal for making `cfg(accessible)` that just looks at std/core/alloc/proc_macro
* I get the impression that implementing that would fully unblock this
* Mostly implementation work at this stage
* Niko: I'm sure you're aware that people do this with build.rs-- how is that different?
* Josh: I feel it's sufficiently awkward with the current setup, but cfg(version) is "a line", it makes it substantially easier and will lead to a lot more use.
* Niko: I find that convincing enough to not try to overcome this block.
* Mark: Right now you can also use build.rs to do accessible-style detection.
* Josh: One further caveat, if this is discovered to be excessively hard to implement, I'm happy to drop my concern, let's not block on having the perfect thing, but I feel like the concrete discussion has zeroed in on something that is extremely implementable
* Action item to post an update and open an issue looking for mentors
* Josh to do that and ping `@rust-lang/compiler` to ask if anyone would be up to mentor
### "Stabilize RFC 2345: Allow panicking in constants" rust#85194
**Link:** https://github.com/rust-lang/rust/issues/85194
* 3/5 checkboxes, concern recently resolved
* so in FCP now!
* only question might be around panics, which currently produce a hard error
* summary: https://github.com/rust-lang/rust/issues/85194#issuecomment-843466857
* doesn't work at all in edition 2021
* The `panic!()` form in Edition 2021 creates a format arguments
* You have to use `panic_any()`, does that work?
* Mara: Not right now, but would be easy.
* Can we just use `panic_any` only?
* Josh: In the future, it'd be nice if you could handle at least the case with no function arguments
* Mara: there is a special case, can we make it a const fn?
* Mara: If we stabilize this before the edition happens, then there is code for which we have no migration lints
* We don't detect this case
* Niko: I just think we should hold off on stabilizing at the moment until we've had a chance to talk this out.
* Mara: We could make a `panic_const` function that takes a string and panics
* Scott: I kind of like that.
* Conclusion: Concern raised, discuss on thread!
### "Ignore derived Clone and Debug implementations during dead code analysis" rust#85200
**Link:** https://github.com/rust-lang/rust/pull/85200
* 2/5 checkboxes
* There was back and forth on whether to include other traits
* Conclusion: No.
* Niko: Bit of a balancing act. The code is not *actually* dead, so the question is "how likely is it to have fields that are there only to be part of being cloned or debugged"?
* In practice, from compiler at least, PartialOrd and friends generated a lot of false warnings.
* Josh: Clone is hard to see, Debug is more plausible, but this is a warning, so people can still use `_` or an allow. Is it an ok case to allow?
* Scott: I'm imagining we could add Hash to the list (if you're not using it for Eq...weird to use it for Hash...). But we can do that in the future.
* Action item (Josh executed during meeting):
* Post a comment confirming that we are signing off only on Clone + Debug
* Code review can confirm that
* Encourage checkboxes!
## Active FCPs
### "RFC: Overconstraining and omitting `unsafe` in impls of `unsafe` trait methods" rfcs#2316
**Link:** https://github.com/rust-lang/rfcs/pull/2316
* Aaron [raised the concern](https://github.com/rust-lang/rfcs/pull/2316#issuecomment-851062597) that folks might forget the `unsafe` on the impl when in fact it *is* required.
* Niko: Seems possible but it's also possible any place you write unsafe code
* Scott: This is not a new concern, we talked about it a bunch, I spent some time but it ultimately seems the same as `Vec::set_len`
* Niko: Seems like another feature request for unsafe fields
* Mark: Even with unsafe fields, you can still mess things up.
* Josh: :+1:
* Action item: Scott to say "we considered that"
## P-critical issues
### "ICE when reifying function pointers to copy / copy_nonoverlapping using an if" rust#84297
**Link:** https://github.com/rust-lang/rust/issues/84297
(Already discussed, I believe)
## Nominated RFCs, PRs and issues
### "Re-add support for parsing (and pretty-printing) inner-attributes in match body" rust#85193
**Link:** https://github.com/rust-lang/rust/pull/85193
* pnkfelix opened Re-add support for parsing (and pretty-printing) inner-attributes within body of a match.
* see also:
* "add back support for inner attributes on non-block expressions?" rust#84879
* "Allow struct and enum to contain inner attrs" rust#84414
* Niko: main concern was that it made the compiler slower, right?
* Mark: I think it had more to do with possible optimizations
* Scott: I'm not actually fond of supporting this conceptually, but as a "well there was breakage, let's fix that", it seems like the right thing to do
* Mark: Next step is probably a T-lang FCP
* Josh: doing it
### "Add `expr202x` macro pattern" rust#84364
**Link:** https://github.com/rust-lang/rust/pull/84364
* Pending action item:
* 2021-05-11: Felix to ask for more concrete grammar implications (from and to) on https://github.com/rust-lang/rust/pull/84364
### "Deny float matches" rust#84045
**Link:** https://github.com/rust-lang/rust/pull/84045
* Niko's proposal: design meeting on structural equality this month
### "Stabilize "RangeFrom" patterns" rust#83918
**Link:** https://github.com/rust-lang/rust/pull/83918
* bstrie opened up a Zulip thread -- did anyone read it?
### "rustc: Allow safe #[target_feature] on wasm" rust#84988
**Link:** https://github.com/rust-lang/rust/pull/84988
* FCP is complete
* Ralf had raised a concern about LLVM optimizations
---
### "implement `Default` for all arrays" rust#84838
**Link:** https://github.com/rust-lang/rust/pull/84838
* Niko wrote up the consideration, we have to decide what to do, but didn't we discuss this before?
### "Check for union field accesses in THIR unsafeck" rust#85263
**Link:** https://github.com/rust-lang/rust/pull/85263
* Niko to do a deep read as part of his review queue.
### "RFC: Overconstraining and omitting `unsafe` in impls of `unsafe` trait methods" rfcs#2316
**Link:** https://github.com/rust-lang/rfcs/pull/2316
(see above)
### "Calling methods on generic parameters of const fns" rfcs#2632
**Link:** https://github.com/rust-lang/rfcs/pull/2632
(see above)
### "Tracking issue for RFC 2523, `#[cfg(version(..))]`" rust#64796
**Link:** https://github.com/rust-lang/rust/issues/64796
(see above)
### "Ignore derived Clone and Debug implementations during dead code analysis" rust#85200
**Link:** https://github.com/rust-lang/rust/pull/85200
(see above)
### "Allow struct and enum to contain inner attrs" rust#84414
**Link:** https://github.com/rust-lang/rust/pull/84414
(see above)
### "add back support for inner attributes on non-block expressions?" rust#84879
**Link:** https://github.com/rust-lang/rust/issues/84879
(see above)
### "Stabilize RFC 2345: Allow panicking in constants" rust#85194
**Link:** https://github.com/rust-lang/rust/issues/85194
### "Fix how allow/warn/deny/forbid `warnings` is handled" rust#85298
**Link:** https://github.com/rust-lang/rust/pull/85298