if only i had a dollar for every time a rust dev fails to realize that wrapping everything in Arc makes their “fearless concurrency” async code run like dogshit on many-core x86 systems because all the atomic refcounting keeps invalidating cache lines and the CPU is too busy managing cache coherence and store buffer flushing to do any real work 
@icedquinn @scathach the rust book only has a brief warning before it proceeds to tell you about Arc and mutexes:
Consider this part of the slogan from the Go language documentation again: “Do not communicate by sharing memory.”
it never explains why
@scathach @icedquinn it also never mentions the performance penalty of atomic refcounting or where it comes from, and neither do 3rd party sources
@icedquinn @scathach i just consider it the result of mathbrained blindness to real world computing where for a lot of code lifetimes simply cannot be statically verified at compile time. afaict async in rust is a joke at the expense of the programmer who spends more time trying to appease the borrow checker than getting anything done
@icedquinn @scathach @phnt i think a problem here is that rust does a bunch of experimental things while masquerading as production-ready, and the way its tools and ecosystem work makes it more of a resumeslop-focused silicon valley industry skill than a language to write free software in. with all the new challenges that rust introduces, that’s absolutely not an environment that produces good design practice.
@phnt @scathach @icedquinn this is why i brought up async in particular. rust wants to know the lifetimes of everything in advance, but async/await futures are fundamentally at odds with that and you get to deal with the consequences in a recursive fashion because async functions must be async all the way down the call stack