---
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