A Design Space Exploration of Async/Await(cel.cs.brown.edu)
462 points by wcrichton 48 days ago | 134 comments
tl;dr: Async/await semantics vary wildly across languages: the authors ran the same simple async program across seven runtimes (Asyncio, C#, JavaScript, Tokio, Smol, Trio, Swift) and got four different outputs, with no two runtimes agreeing across three variations. Their paper identifies nine design dimensions—like eagerness, extent, destruction, and cancellation behavior—that explain the divergence, and formalizes them in a core calculus so execution differences can be traced to specific design choices.
HN Discussion:
  • ↑Impressed by the depth of analysis and validation of long-suspected complexity in async design
  • ↑Values semantics-first comparative language analysis as an educational and practical framework
  • ↑Finds the framework immediately useful for practical language/library design decisions
  • ↓Critiques the methodology (quiz) as unfair for assuming a single canonical usage per framework
  • ~Async/await is a fundamentally flawed abstraction; the divergence proves threading is better