---
# System prepended metadata

title: WG-async triage meeting 2024-05-06
tags: [triage-meeting, minutes, WG-async]

---

---
title: WG-async triage meeting 2024-05-06
tags: ["WG-async", "triage-meeting", "minutes"]
date: 2024-05-06
discussion: https://rust-lang.zulipchat.com/#narrow/stream/187312-wg-async/topic/Triage.20meeting.202024-05-06
url: https://hackmd.io/o8yP4zdtTearanPRcvP5cg
---

# WG-async meeting agenda

- Meeting date: 2024-05-06

## Attendance

- People: TC, eholk
- People (discussion after triage): TC, eholk, David Barsky, Daria, tmandry

## Meeting roles

- Minutes: TC

## Scheduled meetings

None.

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

## Untriaged issues

### "Errors with join and spawn" rust#106049

**Link:** https://github.com/rust-lang/rust/issues/106049

eholk: The code sample given is woefully incomplete, we can't debug this.

### "Anonymous lifetimes in impl trait are allowed in async fn, despite being an unstable feature" rust#108468

**Link:** https://github.com/rust-lang/rust/issues/108468

Triaged.

### "internal compiler error when copying borrow of leaked Box into async move closure for FutureExt::then" rust#123334

**Link:** https://github.com/rust-lang/rust/issues/123334

Triaged.

### "Strange error message when trying to call a function that takes a closure that returns a future" rust#123717

**Link:** https://github.com/rust-lang/rust/issues/123717

Triaged.

### "ICE: `leftover child captures?`" rust#123901

**Link:** https://github.com/rust-lang/rust/issues/123901

Triaged.

### "Universe errors involving an opaque type results in hallucinations and unused bound vars" rust#124472

**Link:** https://github.com/rust-lang/rust/issues/124472

Triaged.

### "Add LocalWaker support" libs-team#191

**Link:** https://github.com/rust-lang/libs-team/issues/191

Already triaged (cannot tag properly).

### "Context reactor hook" libs-team#347

**Link:** https://github.com/rust-lang/libs-team/issues/347

Already triaged (cannot tag properly).

## Discussion on AsyncIterator

TC: Related to the discussions we've been having recently (e.g. with respect to `poll_progress` or alternatives), it occurred to me that we're going to need to decide on the liveness *contract* for `AsyncIterator`.

One possible contract would be a *liveness guarantee*.  That would mean that once we start polling a value, we must continue to poll that value in a *timely* manner until we receive `Ready(None)` or until we drop the value.

If, e.g., the `Waker` unparks the thread responsible for polling the value and yet we park the thread again without polling it (i.e., we ignore the wake), then we would be violating this liveness.  E.g.:

```rust
for await x in async_iter {
    _ = x.await;
    //~^ While we're polling this future, we're ignoring any
    //   firings of the waker for `async_iter`, i.e. we're
    //   starving it and violating liveness, assuming we don't
    //   add some mechanism to avoid this.
}
```

The other possible contract is what we might call *starvation safety*.  In this model, we would declare and document that an async iterator must *expect* to be starved after each time that its `poll_next` method returns a `Ready(_)` value.

(Discussion of this.)

---

David Barsky: At my workplace, as we've discussed in Zulip, we have a substantial need for `AsyncIterator` and for solving the various deadlock and other problems we've encountered with ecosystem solutions, and I'd like to see this work prioritized.  This would help me to better support my internal users.

(Discussion of this.)

(The meeting ended here.)

---

## Nominated RFCs, PRs, and issues

### "Tracking Issue for `waker_getters`" rust#96992

**Link:** https://github.com/rust-lang/rust/issues/96992

### "Tracking Issue for `task::Waker::noop`" rust#98286

**Link:** https://github.com/rust-lang/rust/issues/98286

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

### "Clarification needed on what happens when `Future::poll` wakes an old waker" rust#119698

**Link:** https://github.com/rust-lang/rust/issues/119698

### "Context reactor hook" libs-team#347

**Link:** https://github.com/rust-lang/libs-team/issues/347

## WG RFCs, PRs, and issues nominated for T-lang/T-types

### "Initial support for auto traits with default bounds" rust#120706

**Link:** https://github.com/rust-lang/rust/pull/120706

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