> This is actually the root of the function color problem: async is exactly backwards! Instead of marking asynchronous functions, languages should have had us mark synchronous functions, and then async should have been the default!
What happens when you need to add a new trait that all existing functions must be changed to have? That's why async is generally an attribute.
The answer is that we'd have to say that all functions have some default trait set that can be extended automatically as the language evolves, except those anti-traits they have. Then we could say that a function is async meaning "not sync", or even we could write !sync instead of async.
I rather like the idea that you have to write `!sync` instead of `async`.