Post

A Design Space Exploration of Async/Await

A formal comparison of seven async runtimes finds that superficially similar async/await systems disagree across nine semantic dimensions: eagerness, suspension, task lifetime, destruction, exception propagation, and cancellation. Even a tiny fire-and-forget example produces four different outputs, while no two runtimes agree across three variants. Rust/Tokio’s choices become much easier to reason about when they are stated as explicit design trade-offs rather than assumed to be universal.

Lobsters readers appreciated a missing cross-language summary; discussion highlighted how lack of garbage collection constrains Rust-like async designs and how structured-concurrency choices affect task lifetime.