2 ms·
The way to make that work would be to make poll() unsafe and require async runtimes to uphold the invariant that poll() must be called until completion if Pendi
by pcwalton 5y ago
The way to make that work would be to make poll() unsafe and require async runtimes to uphold the invariant that poll() must be called until completion if Pending is ever returned. That way, runtimes would ensure memory safety.
This doesn't mean that functions using async/await would have to be unsafe, just functions that manually implement poll. I still don't love that, though.
- Arnavion 5y agoThere's no way for an async runtime to do such a thing. An async runtime only knows about the top-level Future of each task. It knows nothing about what other Futures' poll()s the top-level Future's poll() calls in turn. Async-await does not obviate this problem. `let (value, _) = futures::future::select(f1, f2).await.factor_first();` has the same problem, one of the futures is going to be dropped before it resolves.
- pcwalton 5y ago> It knows nothing about what other Futures' poll()s the top-level Future's poll() calls in turn. That's why calling poll would be marked unsafe. When you call poll() manually it's on you to uphold the invariants. > Async-await does not obviate this problem. `let (value, _) = futures::future::select(f1, f2).await.factor_first();` has the same problem, one of the futures is going to be dropped before it resolves. Yes, you also need to reform select. Matthias247 has done work to flesh out what this looks like: https://github.com/Matthias247/rfcs/pull/1 https://github.com/Matthias247/rfcs/pull/1
- Arnavion 5y ago>Matthias247 has done work to flesh out what this looks like: https://github.com/Matthias247/rfcs/pull/1 https://github.com/Matthias247/rfcs/pull/1 By making a new kind of async function that cannot be called from existing async functions, I see. I started reading it with the expectation that RTCFutures would automatically spawn() themselves to enforce the RTC requirement instead of introducing a third function color. I'm pessimistic a third function color will catch on, but let's see how it goes.