--- title: Triage meeting 2021-11-02 tags: triage-meeting --- # T-lang meeting agenda * Meeting date: 2021-11-02 ## Attendance * Team members: nikomatsakis, joshtriplett, scottmcm * Others: simulacrum ## Meeting roles * Action item scribe: * Note-taker: ## Scheduled meetings - Planning meeting tomorrow! - We were supposed to prep updates but didn't, how can we do better here? - Posting reminders would help - Create and publish a template - Can we call out "places where people would like feedback" - Would be good to have a bot that pings people and groups as well - Put out a call for design meeting proposals - Status updates as a design meeting - Possible topics: async dtor - Named fn types might be worth it - Josh and Niko have been talking about "double dereference" (making `&&T` be the same type as `&T`); would make autoref less concerning - probably not at the design meeting stage yet ## Announcements or custom items * Josh has been going through "implemented but not stabilized" * Would be great to have a list of "everything open" * Kind of a "backlog bonanza" item * Sometimes it's just triaging "why is this tracking issue blocked" * unfixed or unresolved design questions * not implemented * needs to bake and garner usage/feedback * Maybe we should start a backlog bonanza effort with that as a goal? * "all tracking issues categorized" ## Action item review * [Action items list](https://hackmd.io/gstfhtXYTHa3Jv-P_2RK7A) ## Pending lang team project proposals ### "negative impls integrated into coherence" lang-team#96 **Link:** https://github.com/rust-lang/lang-team/issues/96 * Plan: nikomatsakis as the liaison, spastorino as owner * Already partly implemented, need to make the repo ### "Deprecate target_vendor " lang-team#102 **Link:** https://github.com/rust-lang/lang-team/issues/102 ### "Async fundamentals initiative" lang-team#116 **Link:** https://github.com/rust-lang/lang-team/issues/116 * Plan: nikomatsakis or cramertj as liaison? Need to sync up here * [cramertj] I'm happy to help-- sync on zulip later? (+1) ### "Attribute for trusted external static declarations" lang-team#118 **Link:** https://github.com/rust-lang/lang-team/issues/118 * Hasn't been discussed much owing to lack of quorum * General idea: * a way to declare an extern static where the *declaration* is unsafe, rather than the usage * Josh: I think fair bit of thought would need to go into semantics. Would need to discuss with Ralf on what the requirements would have to be. * nikomatsakis: I saw Ralf left some comments. * scottmcm: I was a bit confused, what's special for statics here? We've had the same conversation about extern functions? * nikomatsakis: Why not both.gif? * scottmcm: In some ways the fn case seems more normal to me...? * joshtriplett: I'd be ok with extern fn too. Statics do seem a bit different than functions (you can read them) so maybe worth thinking about them separately. * nikomatsakis: I'm in favor of the idea, but didn't want to serve as liaison because overloaded. * josh: "just a metter of getting the details right" ### "Prototype Sync & Async Iterator Items (Minimal generators)" lang-team#121 **Link:** https://github.com/rust-lang/lang-team/issues/121 * Plan: pnkfelix as the liaison ### "Enum Variant Types" lang-team#122 **Link:** https://github.com/rust-lang/lang-team/issues/122 * josh: these have been discussed for years. Can we have a type for a "subset of an enum"? * nikomatsakis: As above, not opposed to the idea, but I didn't feel I had the bandwidth to think about this. * josh: I like that it's a relatively narrow proposal. Not supporting arbitrary subsets, just each variant is its own type. Could extend this to have multiple variants. * nikomatsakis: I'm concerned that this change will have a lot of repercussions (e.g., we might want to make changes over an edition, etc). I think it will require an engaged liaison and iteration to get it working in practice. I'm nervous about opening that door without somebody dedicated. * scottmcm: subtyping, coercions... * josh: ...implementing traits on variant types... * josh: ...can definitely foresee a future soundness hole from some weird corner case. * nikomatsakis: my fear is specifically that this will be the next never type unless we have somebody dedicated to it. * josh: not clear if the right answer is to have somebody implement it? * nikomatsakis: it sounds like we are leaning towards declining this proposal. "not never, but not now." * scottmcm: what would it take to have confidence in this? * do we want somebody to say "here is what I've identified as the tricky bits, this is my plan, I'd like to do it as a prototype"? Or....? * josh: I'd like to see that with, ideally, some flavor of "I'm deeply familiar with type systems". * scottmcm: sounds like it's also 'the type inference consequences of this are complicated enough that we'd be unwilling to take it without chalk' * nikomatsakis: I've been trying not to say chalk, but I am wanting to spend the next year focused on bringing our type system impl "under control" and I would be happier to look into this yesterday. * nikomatsakis: I think what I would want is roughly what scott said but *also* somebody from lang team who has the knowledge pre-req and is wanting to be involved. * josh: I could see this being closed with "we'd like to see this, but we're not ready to make this change yet". * nikomatsakis: I'd be up to write the comment and move to close. * scottmcm: I feel like this is going to want a new subtype, and that's scary, because we have very few of those. * nikomatsakis: also they interact poorly with the trait system (specialization). ### "Support platforms with size_t != uintptr_t" lang-team#125 **Link:** https://github.com/rust-lang/lang-team/issues/125 * Josh: Let's not discuss at length, I can give an intro. People can read async, there's a good Zulip thread, too. * Short version: A long time back, we had an RFC that said `usize` and `isize` are not `size_t` but rather "pointer_t". Usually the same but there are rare platforms where they are not. * Two concrete cases: ARM has a pointer tagging mechanism ("cheri") with 128-bit pointers, even though addr space is 64-bit. Pointers have a "security tag" that prohibits you from forging a valid pointer. So `size_t` is 64-bit but `uintptr_t` is 128 bit. * Other case (obscure) is "super nintendo" processor * Had 32-bit pointers with 16-bit `size_t` * Tradeoff: * a lot of code assumes `usize` is big enough to hold a pointer * a lot of code assumes `usize` is `size_t` for FFI purposes * Can't satisfy both of those simultaneously, so... * have to decide that we won't support those platforms * or that `usize` is truly `uintptr_t` (like the RFC said...) * or that `usize` is truly `usize_t` (...a bit breaking) * Niko: This feels like it has a "portability lint" flavor, it may be useful to write libraries that do assume that `usize` and `size_t` are the same. * Josh: +1 for the portability lint, if we consider doing this at all. * Niko: Feels like we probably want "usize is `uintptr_t` as we said, but most code is allowed to assume those are the same, and there's a way to opt out"...? * Scott: the other part is that all the library methods that take `usize` are a bit awkward if that's not *actually* what you wanted (e.g., indexing). * Niko: Fair. Mostly I think that most people *will* treat them the same, whatever we say =) * Josh: what would go wrong if we treated ARM CHERI as though `size_t` were 128-bit? * Josh: incompatible with C, obviously * How inefficient would it be, though? * Scott: people could use `u64` instead of `usize`.... * Niko: maybe there wants to be a way for libraries to be like "I'm C integer type compatible" and hence opt-in to `ptrdiff_t` vs `usize_t` and so forth. ## PRs on the lang-team repo ### "Initial draft of copy ergonomics design note" lang-team#62 **Link:** https://github.com/rust-lang/lang-team/pull/62 * ~Ready to merge ### "Add draft of variadic notes" lang-team#76 **Link:** https://github.com/rust-lang/lang-team/pull/76 * ~Ready to merge ### "consensus decision making" lang-team#113 **Link:** https://github.com/rust-lang/lang-team/pull/113 * Felix gave feedback, Josh responded and incorporated * Ready for another round of review * Felix can merge when ready ## RFCs waiting to be merged None. ## Proposed FCPs **Check your boxes!** ### "Static async fn in traits" rfcs#3185 **Link:** https://github.com/rust-lang/rfcs/pull/3185 * MVP for async fn in traits * Targeting "static dispatch" - traits that use async fn with this proposal aren't `dyn` safe * Desugars to use an associated type that implements `Future` * Forward-compatible - could work towards dyn safe in the future * Interacts with named function types * This would let us start implementing `AsyncRead`/`AsyncWrite`/etc * Potential future workaround: build a struct using "the erased-serde trick" ### "Tracking issue for `#![feature(const_precise_live_drops)]`" rust#73255 **Link:** https://github.com/rust-lang/rust/issues/73255 * not discussed, still async stuff happening ### "Tracking Issue for const-initialized thread locals" rust#84223 **Link:** https://github.com/rust-lang/rust/issues/84223 * currently blocked on libs ### "stabilize format args capture" rust#90473 **Link:** https://github.com/rust-lang/rust/pull/90473 * `println!("{foo})"` -- huzzah! * niko: Is this in the Rust reference? * josh: No, reference doesn't cover the format syntax at all, it's kind of a library thing, technically. * It's documented in the `format_args!` documentation. * scottmcm: if we had a way to say "look up this variable using the hygiene here", this would be entirely 'proc-macro-able', right? * josh: yes, I believe so, and there was some comments about that in the expand-expr thread. * nikomatsakis: would be nice to have a short blog post once this hits stable... "yay for editions! now we have this nice feature!" * josh: yes, and the history of what we had to do with `panic` * scott: this only accepts a single token, right? you can't do `{foo.bar()}`? * josh: correct. a better error message was proposed but regardless we give a syntax error. * scott: Great. I was going to ask how it handled escaping and tokenization but I don't have to now. ## Active FCPs ### "Constrained Naked Functions" rfcs#2972 **Link:** https://github.com/rust-lang/rfcs/pull/2972 ### "GATs: Decide whether to have defaults for `where Self: 'a`" rust#87479 **Link:** https://github.com/rust-lang/rust/issues/87479 ### "Stabilize `const_raw_ptr_deref` for `*const T`" rust#89551 **Link:** https://github.com/rust-lang/rust/pull/89551 ### "negative impls integrated into coherence" lang-team#96 **Link:** https://github.com/rust-lang/lang-team/issues/96 ## P-critical issues None. ## Nominated RFCs, PRs and issues None.