--- title: WG-async triage meeting 2024-09-05 tags: ["WG-async", "triage-meeting", "minutes"] date: 2024-09-05 discussion: https://rust-lang.zulipchat.com/#narrow/stream/187312-wg-async/topic/Meeting.202024-09-05 url: https://hackmd.io/p6wmagFSTayvApW8rx3Akw --- # WG-async meeting agenda - Meeting date: 2024-09-05 ## Attendance - People: TC, Yosh, eholk ## 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!) ## Scheduling for September - 12th: No meeting, RustConf - 19th - Reorganizing WG-async. - 26th: No meeting. Suggestions: - Can we help unblock async closure syntax? - Probably not much we can do here. - Unsafe lifetime binders? - Also probably not much to do yet? - wg-async button pressing to create T-lang-async-advisors - Write an RFC together? ## Untriaged issues ### "Misleading help suggests `Sync` bound when shareable reference is passed across or into await" rust#129105 **Link:** https://github.com/rust-lang/rust/issues/129105 ```rust fn spawn<F: Future + Send + 'static>(_: F) {} fn spawn_task<T: Send + 'static>(mut state: T) { spawn(async move { let x = &mut state; // <-- Remove `mut` for error. async move { _ = [x] }.await; }); } fn main() {} ``` ```rust! trait AllSend<'a, T: 'a + ?Sized> where &'a mut T: Send, { } impl<'a, T: ?Sized + Send + 'a> AllSend<'a, T> for T {} ``` Proposed responses: --- This is a cool technique to work around this issue! It seems like in general the `Sync` bound is going to be the "more correct" solution, so I wouldn't want to remove that from the suggestion. Then the question is whether to also suggest using a mutable reference. This is already a long error message, so we want to avoid making it longer and likely more confusing. In most cases it seems better to treat this mutable reference as an advanced technique. --- @rustbot labels +AsyncAwait-Triaged -needs-triage Interesting. We talked about this today in WG-async triage. We minimized the issue as follows: ```rust fn spawn<F: Future + Send + 'static>(_: F) {} fn spawn_task<T: Send + 'static>(mut state: T) { spawn(async move { let x = &mut state; // <-- Remove `mut` for error. async move { _ = [x] }.await; }); } fn main() {} ``` We also wrote this to demonstrate the interesting behavior of `&mut` here: ```rust trait AllSend<'a, T: 'a + ?Sized> where &'a mut T: Send, // <-- Remove `mut` to get error. { } impl<'a, T: ?Sized + Send + 'a> AllSend<'a, T> for T {} ``` Overall, we felt in general that adding the `Sync` bound is going to be the right thing to do in most cases. We were skeptical about how generalizable the suggestion of threading `mut` throughout would be. We think the error message might just get too long if we were to try to suggest `mut` here, so we think things are probably fine as-is. Using `mut` to solve the problem here is a bit of a subtle technique. (The meeting ended here.) ### "#[inline(never)] does not work for async functions" rust#129347 **Link:** https://github.com/rust-lang/rust/issues/129347 ### "async code fails to compile with `-Znext-solver`" rust#129865 **Link:** https://github.com/rust-lang/rust/issues/129865 ### "Add LocalWaker support" libs-team#191 **Link:** https://github.com/rust-lang/libs-team/issues/191 ### "Context reactor hook" libs-team#347 **Link:** https://github.com/rust-lang/libs-team/issues/347 ## Nominated RFCs, PRs, and issues ### "Generic Futures" rfcs#3434 **Link:** https://github.com/rust-lang/rfcs/pull/3434 ### "Tracking Issue for `task::Waker::noop`" rust#98286 **Link:** https://github.com/rust-lang/rust/issues/98286 ### "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 ### "Overly conservative async capture analysis when values are borrowed" rust#129325 **Link:** https://github.com/rust-lang/rust/issues/129325 ### "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 None. ## 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!** None. ## Active FCPs None. ## P-critical issues None. ## WG-async work project board https://github.com/orgs/rust-lang/projects/29/views1/d