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