--- title: Triage meeting 2021-05-18 tags: triage-meeting --- # T-lang meeting agenda * Meeting date: 2021-05-18 ## Attendance * Team members: nikomatsakis, Taylor, scott, Josh * Others: simulacrum ## Meeting roles * Action item scribe: simulacrum * Note-taker: nikomatsakis ## Scheduled meetings - ~~"Generators planning" [lang-team#92](https://github.com/rust-lang/lang-team/issues/92)~~ - Tomorrow: "May updates" [lang-team#93](https://github.com/rust-lang/lang-team/issues/93) - Niko posted requests for updates, many of which arrived - Next week: "Rust language "guiding principles"" [lang-team#91](https://github.com/rust-lang/lang-team/issues/91) ## 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 * 2021-04-06: Niko to make sure we have a lang team design note on eagerly drop https://github.com/rust-lang/lang-team/issues/86 ## Pending rfcbot FCPs * Check [rfcbot](https://rfcbot.rs/) ## Nominated RFCs No nominated RFCs this time. ### Lexical reservation RFC (edition dependent) * Consistency with current behavior of `r#`: * Original proposal was "put a space on either side" to avoid the reservation, but: * `r# foo` currently fails to compile. * What does this mean for `foo# bar`? * This would then reserve additional syntactic space. * Allowing this to hash means that you can write `foo# bar` and don't have to write `foo # bar` or `foo #bar`. * No known examples where anybody cares. * Only example people have raised is `f#"..."` which is a distinct thing from this question. * Meeting consensus: * Lexing error to have `foo# ` for consistency with `r#` * Action item: scott to report meeting consensus to the thread. * https://github.com/rust-lang/rust/issues/84979 * `proc_macro::TokenStream::from_str` takes a string and has no way to specify the edition * currently uses the edition of the invocation site of the procedural macro * cramertj/niko: decent choice, but the function is flawed * would expect this to take a span as an argument -- i.e., this trait impl should not exist * one problem in practice: * macro invocation sometimes "redirects" and hence you would get the edition * another alternative: make this behavior work across all editions * impact: existing procedural macros that rely on `f"foo"` would be broken without migration * crater run did terminate that `k#foo` will not break any existing code * decision: * ask matklad + petrochenkov to elaborate a bit more on the downsides of edition-dependent lexing * how much more difficult * are there fundamental aspects of the design that are interrupted * scottmcm: if we don't do edition-dependent lexing, can we ever introduce new tokens? * conclusion: that seems hard =) * what has been tested? * started with everything and found `f".."`, that's why we tested `k#foo` * should check for other things like `ident#ident`, we don't necessarily have to deal with `f"..."` at this time ## P-high issues on rust-lang/rust No new issues or major updates. ## 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" (const_panic)" rust#51999 **Link:** https://github.com/rust-lang/rust/issues/51999 * Nomination removed but moved to [#85194](https://github.com/rust-lang/rust/issues/85194) * Question: * Should we have a way to specify a constant whose value is not yet known? * e.g., `const FOO: T = todo!();` * Josh: this could be useul, maybe it wants its own feature? * Given the concern around catching panics, do we want a "force compilation error"? * Maybe, but we don't have a concrete example yet. * Use sys::exit!! * scottmcm has an existing action item ### "Tracking issue for unsizing casts in const fns" rust#64992 **Link:** https://github.com/rust-lang/rust/issues/64992 * In FCP now, 3 days remaining (https://github.com/rust-lang/rust/pull/85078) ### "Implement new lint for detecting buggy pointer-to-int casts" rust#81789 **Link:** https://github.com/rust-lang/rust/pull/81789 * [Mark summarized previous discussion](https://github.com/rust-lang/rust/pull/81789#issuecomment-841714319) * [Libs thread opened, no clear conclusions](https://rust-lang.zulipchat.com/#narrow/stream/219381-t-libs/topic/Adding.20methods.20as.20more.20specific.20versions.20of.20.60as.60) * Libs response: * We are amenable to proposed concrete functions that serve specific conversion purposes. * It would be fine to have them proposed individually. * Also nice if somebody had a more comprehensive of "valuable uses of as" with proposed functions for all of them. * Niko's opinion: * This sounds like a project group with the goal of "deprecating as" (or "limiting as" to safer semantics). * But we can do it bit by bit. * Meeting consensus: * Close the PR * Suggest adding APIs to stdlib for these sorts of casts (convey the general approval of libs team) * Ideally, do this comprehensively, but this is a libs team approval question * Once APIs exist, lints to deprecate parts of `as` can be considered. * Design note documenting the direction we would like to go. * Josh to follow up. ### "Stabilize "RangeFrom" patterns" rust#83918 **Link:** https://github.com/rust-lang/rust/pull/83918 * FCP complete but bstrie [left a comment](https://github.com/rust-lang/rust/pull/83918#issuecomment-837368851) about range patterns in slice position: * The pattern `[..]` means "match any array" * vs the pattern `[0..]` means "match an array with something >= 0 in it" * slice notation: * `[3, 4, 5, \[x @\] .., 6, 7]` * bstrie proposes the following patterns should be an error: ```rust match [0] { [0..10] => (), [..255] => (), [0..] => (), [..=10] => (), } ``` * Josh: seems unlikely to be what you want. We could disallow them without parentheses. * If what you mean is "match a single element array with values in this range" then use parens: `[(0..)]` * Niko: feels like a lint to me. * Josh: note this only applies to single element cases. If you write this: * `[0.., 5.., 10..]` * it's pretty clear what you want * Meeting consensus: * FCP stands but we would request a warn-by-default lint for the single element case. * Open an E-mentor issue. * Action item (Mark): * Comment that we believe this would be sufficiently addressed by a warn-by-default lint and request bstrie open an issue. ### "rustc: Allow safe #[target_feature] on wasm" rust#84988 **Link:** https://github.com/rust-lang/rust/pull/84988 * Motivation: * WASM target features are not understood by all WASM targets. * However, they will not misinterpret them, they will simply *fail to load* the WASM code. * Using WASM target features (when targeting WASM) is hence not *unsafe*, but it may block your code from loading. * scott: * People want this for non-WASM, isn't this a special case of target feature 1.1? * josh: * target feature 1.1 allows you to call AVX from a fn that already requires AVX * but separately, there is "should you be able to call a fn that requires SSE from a platform that has SSE mandatory" * niko: are we concerned about the fact that it is target specific, and we generally try to avoid target specific errors and things? * mark: target feature is already relative to your target (no namespaceing, etc), so if you are using target-feature without cfg, you are probably doing something wrong * scott: what happens if you use target feature SSE on x86-64? * josh: assuming that exists, it should just be a no-op, because all x86_64 targets have SSE * scott: ok, this is different from WASM because not all WASM engines will have these instructions * another point: wasm prevents a lot of UB, but we still don't want to make everything safe (e.g., dangling pointers) * niko: still feels like UB, even if the scope is somewhat narrower ### "Uplift the invalid_atomic_ordering lint from clippy to rustc" rust#84039 **Link:** https://github.com/rust-lang/rust/pull/84039 ### "Deny float matches" rust#84045 **Link:** https://github.com/rust-lang/rust/pull/84045 * Update: const generics group had a discussion today, likely to be a design meeting proposal ### "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 ### "stabilize member constraints" rust#84701 **Link:** https://github.com/rust-lang/rust/pull/84701 ### "implement `Default` for all arrays" rust#84838 **Link:** https://github.com/rust-lang/rust/pull/84838 ### "add back support for inner attributes on non-block expressions?" rust#84879 **Link:** https://github.com/rust-lang/rust/issues/84879 ### "Ignore derived Clone and Debug implementations during dead code analysis" rust#85200 **Link:** https://github.com/rust-lang/rust/pull/85200 ### "Check for union field accesses in THIR unsafeck" rust#85263 **Link:** https://github.com/rust-lang/rust/pull/85263 Initial summary comment: https://github.com/rust-lang/rust/pull/85263#issuecomment-842549594