|
|
|
|
|
by devxpy
2220 days 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". |
|