Home > Blockchain >  How are Kotlin coroutines different from async-await in Dart?
How are Kotlin coroutines different from async-await in Dart?

Time:11-16

Dart makes asynchronous programming extremely easy. All you need to do is surround the asynchronous code in an async method, and within it, use await before every call that is going to take a while.

I'm new to Kotlin, and asynchronous programming doesn't seem that simple here. (Probably because Dart is single-threaded.)

It'd be nice to get a rough outline of the differences both languages provide in their implementation of asynchronous code.

Apologize if I miss-stated any facts. Thanks in advance!

CodePudding user response:

Dart makes asynchronous programming extremely easy. All you need to do is surround the asynchronous code in an async method, and within it, use await before every call that is going to take a while.

Yes (though async await is not Dart's invention, it dates back to at least C# 5.0 in 2012, which then directly inspired JavaScript, Python, Julia, Kotlin, Swift, Rust, many others, and Dart).

I'm new to Kotlin, and asynchronous programming doesn't seem that simple here.

Kotlin 1.1 has async await, although await is a postfix method, not an operator unlike in most other languages, but the end-result is the same.

It'd be nice to get a rough outline of the differences both languages provide in their implementation of asynchronous code.

Kotlin and Dart are different languages because they solve different problems, consequently there's simply too much to write about their differences, even when focused entirely on how they handle concurrency and coroutines.


...but in-short, the main difference (as far as you're concerned) is syntactical (which is as far as I can tell: Be aware that I am not a Dart/Flutter nor Kotlin expert, I just know how to read documentation and use Google)

I suggest seeing some simple examples in Kotlin, such as:


CodePudding user response:

The most important difference, beside the syntax, is the multithreading model of these languages.

Check this article:

Dart supports multi-threading using Isolates. Right in the introduction to Isolates, it has been said that isolates [are] independent workers that are similar to threads but don’t share memory, communicating only via messages.

While Kotlin (on JVM) uses Java threads under the hood, which have access to shared memory.


async/await in both languages is implemented roughly the same, using CPS (glorified callbacks). The important distinction, in Dart you have single threaded event loop dispatching these callbacks, while in Kotlin on JVM you can have multiple event dispatches working together and continuations (callbacks) running truly in parallel on different threads and sharing memory, with all the benefits and issues resulting from that.

Also, note, Kotlin aims to be a multiplatform language, so while on JVM it has multithreaded model, if you compile Kotlin program into JS backend, it would be single-threaded with event-loop, basically same as Dart.


P.S. Watch this video from Roman Elizarov (designer of coroutines in Kotlin), is has a good overview of coroutine usage and internals.

  • Related