A Design Space Exploration of Async/Await
Every language pitches async/await as synchronous-looking code, and the same two keywords appear everywhere. But behind the shared syntax hide nine independent design decisions, and no two of seven modern runtimes agree on what even the simplest async programs should do! In this paper we map the design space of async/await so you can find out where your language stands.
Many programming languages now provide the async/await keywords for expressing concurrency. The design rationale is pretty consistent: to make concurrent programs look more like straight-line code (see: Python, Rust, or Swift). We therefore describe the paradigm which encompasses async/await as straight-line asynchrony, as opposed to using event loops or callbacks. Language designs for straight-line asynchrony have been brewing for over 15 years. In this project, we wanted to understand: how similar or different is async/await between languages? The short answer is a lot more different than…
saved by
related reading
- What Async Promised and What it Delivered — Causalitycausality.blog
- (Quite) A Few Words About Asyncyoric.github.io
- Let futures be futureswithout.boats
- Async Rust Is A Bad Languagebitbashing.io
- Why choose async/await over threads? | Hacker Newsnews.ycombinator.com
- Why async Rust?without.boats
- Reading 15: Promisesweb.mit.edu
- async/await on embedded Rust - Ferrous Systemsferrous-systems.com
- Introduction - Asynchronous Programming in Rustrust-lang.github.io
- Is there a good read on different async runtimes? - help - The Rust Programming Language Forumusers.rust-lang.org
- Fundamentals of Asynchronous Programming: Async, Await, Futures, and Streams - The Rust Programming Languagedoc.rust-lang.org
- no_std async/await - soon on stable - Ferrous Systemsferrous-systems.com