目录
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
功能。在这样的序列中,返回序列元素的代码块在每个元素被检索之后被暂停,并且当请求下一个元素时被恢复。这里有一个例子: