Deferred computation is a primitive, and threads do not solve it.
Any fundamentally blocking operations could be forced by the compiler to have have two implementations - sync (normal) and async, which defers to some abstract userspace scheduler that's part of the language itself.
You still have concurrency or interleaved execution to contend with but that could be represented more explicitly since it's not unique to async.
I haven't done much rust but implementing blocking operations as async functions is commonly achieved in Python by using threads under the hood anyway
The choice and ordering and soforth of yield points / poll order really drastically can change the semantics of your program. But if you don’t care..
It is possible! They're called blue (sync) functions.
(Actually, they can, but you're going to stop the whole scheduler, or at least one of its worker threads, which is something you really don't want to do...)
But I was wondering if the same thing could be brought to Rust, while still keeping the runtime away from the language. I probably forgot to mention Rust in the grandparent comment.