One thing that most languages are lacking is expressing lazy return values. -> await f1() + await f2() and to express this concurently requres manually handing of futures.
you mean like?
await Join(f1(), f2())
Promise1 = f1(); Promise2 = f2(); await Join(Promise1, Promise2);
Which languages do have such a thing?
That's because f2's result could depend on whether f1 has executed.
you mean like?
Although more realistically But also, futures are the expression of lazy values so I'm not sure what else you'd be asking for.