Kotlin 的市场主管 Roman Belov撰文写到,Kotlin 的新版本引入了多项新的语言特性(其中最值得注意的就是协程),同时还提升了对其JavaScript 目标环境的支持。
尽管依然被认为处于试验性阶段,但是Kotlin 1.1 最关键的新特性之一就是协程(coroutine),这个特性可以通过使用三个高层级的构造(construct)来实现: async、await和yield。举例来说:我们可以采用async和await来处理异步操作:
  // 在后台线程池中运行代码 fun asyncOverlay() = async(CommonPool) {    // 开启两个异步操作    val original = asyncLoadImage("original")    val overlay = asyncLoadImage("overlay")    // 然后,将 overlay 应用到这两个结果上    applyOverlay(original.await(), overlay.await()) } // 在 UI 上下文中启动新的协程 launch(UI) {    // 等待异步 overlay 完成    val image = asyncOverlay().await()    // 然后在 UI 上显示    showImage(image) } 
注意,这里使用了launch,它会启动一个协程。实际上,await只能在一个协程中使用或者在使用关键字suspend声明的函数中使用,这样的话,能够让编译器生成相应的代码,从而在协程中运行函数:
  suspend fun workload(n: Int): Int {    delay(1000)    return n } 
在上例中,delay推迟了协程,并不会阻塞它关联的线程。
协程还能以懒加载的方式借助yield来生成序列:
  // 推断出的类型为 Sequence<int> val fibonacci = buildSequence {    yield(1) // 第一个 Fibonacci 数字    var cur = 1    var next = 1    while (true) {        yield(next) // 下一个 Fibonacci 数字        val tmp = cur + next        cur = next        next = tmp    } } println(fibonacci.take(10).joinToString()) </int> 
因为还是试验性的,协程目前只是选择性使用状态(opt-in),它们的 API 在未来的释放版本中可能会有所变更。
Kotlin 1.1 添加的其他重要的新特性包括:
- 类型别名,允许用户为某种类型定义其他的名称。
 ::操作符能够获取特定对象某个方法的成员引用。- 数据类可以进行扩展。
 - 在 lambdas 中支持 Destructuring。
 
在对 JavaScript 的支持方面,1.1 版本的主要目标是让对 JavaScript 的支持能够达到与 JVM 对等的程度。这意味着,所有的语言特性都可以在这两个目标平台中使用,不过反射除外,目前 JavaScript 还没有这样的特性。尤其是:
- Kotlin 标准库中很大一部分都可以用在 JavaScript 上。
 - 生成的代码对 JavaScript 工具更加友好,比如压缩器(minifier),优化器(optimizer)等等。
 - 用于 Kotlin 类声明的
external修饰符目前在 JavaScript 中已经实现了。 
我们可以使用在线的REPL 来尝试Kotlin,也可以按照多种不同的方式来进行安装。
查看英文原文: Kotlin 1.1 Adds Coroutines, Type Aliases, Improved JavaScript Support








    


评论