Some thoughts on asynchronous API design in a post-async/await world

when we’re typing out code we don’t usually stop to think about all the wacky ways that things could be done differently. Yet these all had to be invented. In functional languages, f(); g() doesn’t express ordering. Back in the 1970s, the idea of limiting yourself to using just function calls, loops, and if statements – goto‘s hamstrung siblings – was *incredibly controversial*.