目录
JavaScript的
从Kotlin 1.1开始,JavaScript目标不再被认为是实验性的。支持所有语言功能,还有许多新工具可用于与前端开发环境集成。有关更改的更详细列表,请参阅下文。
协调(实验)
在科特林1.1的主要新功能是协同程序,带来的支持async/ await,yield和类似的编程模式。Kotlin设计的关键特征是协同执行的实现是库的一部分,而不是语言,所以你不必受任何特定的编程范例或并发库的约束。
协同实际上是一个轻质线,可以暂停和恢复。通过挂起功能支持协调程序:调用这样的函数可能会暂停协同程序,并启动一个新的协同程序,我们通常使用匿名挂起函数(即挂起lambdas)。
我们来看看async/ await这是在外部库中实现的,kotlinx.coroutines:
// runs the code in the background thread pool
fun asyncOverlay() = async(CommonPool) {
// start two async operations
val original = asyncLoadImage("original")
val overlay = asyncLoadImage("overlay")
// and then apply overlay to both results
applyOverlay(original.await(), overlay.await())
}
// launches new coroutine in UI context
launch(UI) {
// wait for async overlay to complete
val image = asyncOverlay().await()
// and then show it in UI
showImage(image)
}
在这里,async { ... }启动协同程序,当我们使用await()时,在等待完成的操作被执行的同时执行协议程序的执行被暂停,并被恢复(可能在不同的线程上)。
标准库使用协同程序,以支持懒惰地产生的序列与yield和yieldAll功能。在这样的序列中,返回序列元素的代码块在每个元素被检索之后被暂停,并且当请求下一个元素时被恢复。这里有一个例子: