<story><title>Why you might want async in your project</title><url>https://notgull.net/why-you-want-async/</url></story><parent_chain></parent_chain><comment><author>klabb3</author><text>I mean.. I appreciate that there are proponents and people trying to improve the state of async rust but to allude that everything is dandy is either dishonest or more likely a strong curse of knowledge bias.&lt;p&gt;I’ve worked deeply in an async rust codebase at a FAANG company. The vast majority chooses a dialect of async Rust which involves arcs, mutices, boxing etc everywhere, not to mention the giant dep tree of crates to do even menial things. The ones who try to use proper lifetimes etc are haunted by the compiler and give up after enough suffering.&lt;p&gt;Async was an extremely impressive demo that got partially accepted before knowing the implications. The remaining 10% turned out to be orders of magnitude more complex. (If you disagree, try to explain pin projection in simple terms.) The damage to the ecosystem from fragmentation is massive.&lt;p&gt;Look, maybe it was correct to skip green threads. But the layer of abstraction for async is too invasive. It would have been better to create a “runtime backend” contract - default would be the same as sync rust today (ie syscalls, threads, atomic ops etc – I mean it’s already half way there except it’s a bunch of conditional compilation for different targets). Then, alternative runtimes could have been built independently and plugged in without changing a line of code, it’d be all behind the scenes. We could have simple single-threaded concurrent runtimes for embedded and maybe wasm. Work stealing runtimes for web servers, and so on.&lt;p&gt;I’m not saying it would be easy or solve &lt;i&gt;all&lt;/i&gt; use-cases on a short time scale with this approach. But I do believe it would have been possible, and better for both the runtime geeks and much better for the average user.</text></comment>
<story><title>Why you might want async in your project</title><url>https://notgull.net/why-you-want-async/</url></story><parent_chain></parent_chain><comment><author>dpc_01234</author><text>I might need a lot of stuff in my software. Eventually. I might need distributed database, or to to scale it out to run on multiple machines, and then maybe Raft, or reactive architecture, zero-copy IO, or incremental updates or ... or ... the list goes on and on.&lt;p&gt;Thinking too much and in particularly going with over complicated solutions from the very start because &amp;quot;might&amp;quot; is just bad engineering.&lt;p&gt;Also, even if I do need async in a certain place, doesn&amp;#x27;t mean I need to endure the limitations and complexity of async Rust &lt;i&gt;everywhere&lt;/i&gt; in my codebase. I can just spawn a single executor and pass around messages over channels to do what requires async in async runtime, and what doesn&amp;#x27;t in normal and simpler (and better) blocking IO Rust.&lt;p&gt;You need async IO? Great. I also need it sometimes. But that doesn&amp;#x27;t explain the fact that every single thing in Rust ecosystem nowadays is async-only, or at best blocking wrapper over async-only. Because &amp;quot;async is web-scale, and blocking is not web-scale&amp;quot;.&lt;p&gt;Edit: Also the &amp;quot;just use smol&amp;quot; comically misses the problem. Yeah, smol might be simpler to use than tokio (it is, I like it better personally), but most stuff is based on tokio. It&amp;#x27;s an uphill battle for the same reasons using blocking IO Rust is becoming an uphill battle.   Only thing better than using async when you don&amp;#x27;t want to is having to use 3 flavors (executors) of async, when you didn&amp;#x27;t want to use any in the first place.&lt;p&gt;Everything would be perfect and no one would complain about async all the time if the community defaulted to blocking, interoperable Rust, and then projects would pull in async in that few places that &lt;i&gt;do actually need&lt;/i&gt; async. But nobody wants to write a library that isn&amp;#x27;t &amp;quot;web-scale&amp;quot; anymore, so tough luck.</text></comment>