The author admits that they needed Arc/clone in a footnote. So I think the more interesting title would be to rehash/interpret this as “Why asynchronous Rust is too hard”.
Having played with this a bit recently, I think folks are going to end up:
- assuming Tokio (now that it’s 1.xx)
- mark nearly everything as async
- push callers to use rt.block_on to wait for an async function from non-async code
I definitely miss the easy concurrency of golang the author refers to (more so in the colored functions post), particularly since AFAICT, tokio is basically going to become the default assumption. So Rust is technically pluggable here, but won’t be in practice. Does that mean that embedded folks end up having their own !tokio that they prefer? Maybe! But they’ll get locked out of the “assume tokio” ecosystem.