Async Rust never left the MVP state
Perception of the Title and State of Async Rust
- Many see the title (“never left MVP”) as exaggerated or click‑baity; some call it borderline misleading, others defend it as directionally true because the core async machinery hasn’t evolved much since stabilization.
- Several commenters stress that the article is motivated by love of Rust and heavy async use, not by “hating on Rust.”
Performance, Code Size, and Embedded Constraints
- A recurring theme: small futures and fewer state variants matter on microcontrollers and other no‑std / constrained systems (RAM, flash, compile times).
- Some dismiss the focus on trivial-function overhead as micro‑optimization; others note empirical 2–5% binary size reductions and ~3% perf gains from early compiler experiments.
- There’s concern about code bloat when many “logically sync” functions must be async (e.g., trait methods with mixed sync/async implementations).
Async Model, Function Coloring, and Possible Fixes
- The “function coloring” problem (sync vs async duplication) is widely acknowledged. Crates like maybe‑async and sans‑io patterns are discussed as partial workarounds but with limitations.
- Future directions mentioned: keyword generics, algebraic effects, and an “effects initiative” to make code generic over async/const/etc., though progress appears slow/uncertain.
- Some argue Rust simply “missed” with its async design; others counter that for a systems language with zero‑cost FFI goals, the trade‑offs are reasonable.
Threads vs Async vs Green Threads
- Big debate:
- One side: traditional threads (or green threads) are the “right” mental model; async/await is a workaround for performance issues or missing threading.
- Other side: OS threads are too heavyweight for fine‑grained I/O concurrency; async with work‑stealing executors offers better scalability and latency.
- Green threads (Go, Java virtual threads, etc.) are praised for ergonomics but critiqued as incompatible with Rust’s zero‑cost and FFI goals.
Runtimes, Tokio Dominance, and Standard Library Role
- Concern that the ecosystem is overly dependent on Tokio, analogous to a third‑party GC being de facto standard.
- Some want standard traits and a default executor in std (like the global allocator), with overridable implementations.
- Others warn that standardizing a runtime could freeze a suboptimal design and reduce flexibility across platforms (servers vs embedded, single‑threaded vs work‑stealing).
Ergonomics, Learning Curve, and Overall Sentiment
- Several commenters feel async Rust is much less “joyful” than the rest of the language and reach for threads instead.
- Others argue async Rust is still better than most languages’ async, especially given its applicability to embedded, kernels, and no‑std contexts.