--- title: WG-async triage meeting 2024-02-12 tags: ["WG-async", "triage-meeting", "minutes"] date: 2024-02-12 discussion: https://rust-lang.zulipchat.com/#narrow/stream/187312-wg-async/topic/Triage.20meeting.202024-02-12 url: https://hackmd.io/W7X8mIg2RhOaRUr_UdXRtA --- # WG-async meeting agenda - Meeting date: 2024-02-12 ## Attendance - People: TC, CE, eholk, Yosh ## Meeting roles - Minutes: TC ## Scheduled meetings - 2024-02-15: "Discuss `impl Future` for thread `JoinHandle`" [#332](https://github.com/rust-lang/wg-async/issues/332) - 2024-02-22: "Discuss `AsyncIterator` prototype" [#333](https://github.com/rust-lang/wg-async/issues/333) - 2024-02-29: "Discuss async portability" [#334](https://github.com/rust-lang/wg-async/issues/334) Update these [here](https://github.com/orgs/rust-lang/projects/40/views/1). ## Proposed meetings None. Update these [here](https://github.com/orgs/rust-lang/projects/40/views/1). ## Announcements or custom items (Meeting attendees, feel free to add items here!) ## Nominated RFCs, PRs, and issues ### "Implement `Future` for `Option<F>`" rust#109691 **Link:** https://github.com/rust-lang/rust/pull/109691 - [Yosh's comment on the ACP](https://github.com/rust-lang/libs-team/issues/197#issuecomment-1488579556) All: `Option` implements `IntoIterator`. We want consistency. eholk: Would we ever want to partially poll it then match on the `Option`? ```rust let mut f = Some(async { foo().await }); if let Pending = f.poll(cx) { // poll did not complete, so f is partially polled match f { Some(f) => /* do something with inner future */, None => return () } } ``` This example probably doesn't work in general because of pinning. TC: Using a different semantic than what is proposed here, we could have `into_future` return `Ready`, then we could have `Ready::into_inner` return `Option`. CE: My view is we shouldn't do this at all. eholk: Async closures are a thing; could we do `option.async_map(async |x| ...)`? eholk: The only code example I've seen of using this is from Yosh's comment [here](https://github.com/rust-lang/libs-team/issues/197#issuecomment-1488579556). *Consensus*: We don't want this. ### "Tracking Issue for `task::Waker::noop`" rust#98286 **Link:** https://github.com/rust-lang/rust/issues/98286 TC: In a previous meeting, we decided that we would prefer `Waker::noop` to return `&Waker` due to ergonomic considerations given the behavior of temporary lifetimes. However, in the thread, @**Kevin Reid** [points out](https://github.com/rust-lang/rust/issues/98286#issuecomment-1892588337) that `Waker::NOOP` is another option, and notes that across the standard library, aside from `new` functions, it's unusual to use functions to return constant values. What do we think about that? (This would also have bearing, presumably, on how we'd feel about `Context::NOOP` versus `Context::noop()`.) Even if we do it as an associated constant, there's still the question of whether it should be of type `Waker` or `&Waker`. In apparent support of the latter, I note that this code fails: ```rust use core::task::{Context, RawWaker, RawWakerVTable, Waker}; pub const NOP_RAWWAKER: RawWaker = { fn nop(_: *const ()) {} const VTAB: RawWakerVTable = RawWakerVTable::new(|_| NOP_RAWWAKER, nop, nop, nop); RawWaker::new(&() as *const (), &VTAB) }; pub const NOP_WAKER: Waker = unsafe { Waker::from_raw(NOP_RAWWAKER) }; pub const NOP_CONTEXT: Context<'static> = Context::from_waker(&NOP_WAKER); //~^ ERROR destructor of `Waker` cannot be evaluated at compile-time //~| NOTE the destructor for this type cannot be evaluated in constants //~^ ERROR temporary value dropped while borrowed //~| creates a temporary value which is freed while still in use ``` Whereas it works if we instead make the constant of type `&Waker`. CE/eholk: +1. Yosh: No opinion. *Consensus*: We want this to be an associated constant of type `&Waker`. ### Backlog, meeting next week (We discussed that we're falling behind on our backlog, and we agreed to have an extra WG-async triage meeting next week.) (The meeting ended here.) ### "Tracking Issue for `waker_getters`" rust#96992 **Link:** https://github.com/rust-lang/rust/issues/96992 ### "Tracking Issue for `Ready::into_inner()`" rust#101196 **Link:** https://github.com/rust-lang/rust/issues/101196 ### "Tracking Issue for `const_waker`" rust#102012 **Link:** https://github.com/rust-lang/rust/issues/102012 ### "Rename `AsyncIterator` back to `Stream`, introduce an AFIT-based `AsyncIterator` trait" rust#119550 **Link:** https://github.com/rust-lang/rust/pull/119550 ### "Add LocalWaker support" libs-team#191 **Link:** https://github.com/rust-lang/libs-team/issues/191 ## Untriaged issues ### "Bad error message using shared borrow of non-sync type across await point" rust#71010 **Link:** https://github.com/rust-lang/rust/issues/71010 ### "Poor error message when spawning a future returned by an async fn that takes an owned value as reference" rust#81096 **Link:** https://github.com/rust-lang/rust/issues/81096 ### "Function works but non-capturing closure with identical signature fails with strange error" rust#81326 **Link:** https://github.com/rust-lang/rust/issues/81326 ### "`implementation of Debug is not general enough` when making async block into `&dyn Future + Send`" rust#87425 **Link:** https://github.com/rust-lang/rust/issues/87425 ### "Confusing interaction between associated types, `async fn` and `impl Future`" rust#89657 **Link:** https://github.com/rust-lang/rust/issues/89657 ### "Unexpected "the parameter type X may not live long enough" error in asynchronous functions" rust#95719 **Link:** https://github.com/rust-lang/rust/issues/95719 ### "Tracking Issue for `waker_getters`" rust#96992 **Link:** https://github.com/rust-lang/rust/issues/96992 ### "Implementation of FnOnce is not general enough for `Flatten` iterator of futures outliving an .await point" rust#98380 **Link:** https://github.com/rust-lang/rust/issues/98380 ### "async blocks can't forward references" rust#100406 **Link:** https://github.com/rust-lang/rust/issues/100406 ### "Tracking Issue for `const_waker`" rust#102012 **Link:** https://github.com/rust-lang/rust/issues/102012 ### "Mut borrow persists after await" rust#106688 **Link:** https://github.com/rust-lang/rust/issues/106688 ### "`async_fn_in_trait` and `return_type_notation` cause awkward awaits" rust#112569 **Link:** https://github.com/rust-lang/rust/issues/112569 ### "ICE with "failed to resolve instance for <... as IntoFuture>::into_future: Ok(None)" (regression between 1.73 and 1.74)" rust#119095 **Link:** https://github.com/rust-lang/rust/issues/119095 ### "Cycle detected in async fn but not with -> impl Future" rust#119727 **Link:** https://github.com/rust-lang/rust/issues/119727 ### "never patterns: `!` argument not detected as diverging on async fn" rust#120240 **Link:** https://github.com/rust-lang/rust/issues/120240 ### "Value is incorrectly considered to be borrowed accross await points" rust#120442 **Link:** https://github.com/rust-lang/rust/issues/120442 ### "ICE: `ConstContext::Maybe must have host effect param` during `mir_const_qualif`" rust#120503 **Link:** https://github.com/rust-lang/rust/issues/120503 ### "Add LocalWaker support" libs-team#191 **Link:** https://github.com/rust-lang/libs-team/issues/191 ## WG RFCs, PRs, and issues nominated for T-lang/T-types ### "`.await` does not perform autoref or autoderef" rust#111546 **Link:** https://github.com/rust-lang/rust/issues/111546 ## Pending PRs on the WG-async repo None. ## `S-waiting-on-team` ### "Rename `AsyncIterator` back to `Stream`, introduce an AFIT-based `AsyncIterator` trait" rust#119550 **Link:** https://github.com/rust-lang/rust/pull/119550 ## Proposed FCPs **Check your boxes!** ### "Tracking Issue for `waker_getters`" rust#96992 **Link:** https://github.com/rust-lang/rust/issues/96992 ### "Tracking Issue for `Ready::into_inner()`" rust#101196 **Link:** https://github.com/rust-lang/rust/issues/101196 ### "Tracking Issue for `const_waker`" rust#102012 **Link:** https://github.com/rust-lang/rust/issues/102012 ## Active FCPs None. ## P-critical issues None. ## WG-async work project board https://github.com/orgs/rust-lang/projects/29/views1/d