I work professionally in embedded rust, and we don’t use async. That’s because we’re
aggressively static; there’s no dynamic allocation in the system at all. This isn’t
inherently an issue with async on bare metal, but it doesn’t really
buy us anything, so we’re not doing it.
That said, it is very cool, and does work well, if you want to do it. I think for many projects it would make sense. For our requirements, synchronicity works, and so we’re sticking with it, but folks on my team use it for other things, just not in the specific context we’re in.
The key is that nothing in async rust requires dynamic allocation. This is in opposition to C++‘a async stuff, which can in theory optimize away the allocations that are required, but you’re relying on the optimizer to do that. Our particular environment allows us to be 100% static, all the time, and so we’re pursuing that route as far as it can go.