---
# System prepended metadata

title: WG-async triage meeting 2024-02-12
tags: [triage-meeting, minutes, WG-async]

---

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