3 ms·
> Many popular languages today predate modern asynchronous computing. This makes async-as-default impossible because it's an afterthought Here's a rough sketch
by devxpy 6y ago
> Many popular languages today predate modern asynchronous computing. This makes async-as-default impossible because it's an afterthought
Here's a rough sketch of how this can be achieved for a language that already has event loops -
Transpile the following -
void main() {
Future<int> xFuture = async doSomething()
int x = doSomething()
assert(await xFuture == x);
}
Into -
Future<void> main() async {
Future<int> xFuture = (() async => await doSomething())();
int x = await doSomething();
assert(await xFuture == x);
}
Now people can keep using a pre-existing `doSomething()` (that's either async or sync) and its compatible with our new caller based async statement.
BTW that transpiler output is runnable dart code actually works.
I know this has tons of edge cases that this simple example doesn't capture, but it's definitely "possible".