写点什么

Kotlin 1.1 新增协程、类型别名特性,提升了对 JavaScript 的支持

  • 2017-03-15
  • 本文字数:1123 字

    阅读完需:约 4 分钟

Kotlin 的市场主管 Roman Belov撰文写到,Kotlin 的新版本引入了多项新的语言特性(其中最值得注意的就是协程),同时还提升了对其JavaScript 目标环境的支持。

尽管依然被认为处于试验性阶段,但是Kotlin 1.1 最关键的新特性之一就是协程(coroutine),这个特性可以通过使用三个高层级的构造(construct)来实现: asyncawaityield。举例来说:我们可以采用asyncawait来处理异步操作:

复制代码
// 在后台线程池中运行代码
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

2017-03-15 19:003298

评论

发布
暂无评论
发现更多内容

druid源码阅读(一)整体概览

爱晒太阳的大白

5月月更

开源之夏 2022 火热来袭!欢迎报名 OpenMLDB 社区项目~

第四范式开发者社区

人工智能 机器学习 数据库 开源 特征平台

algorithm中的排序算法详解

工程师日月

算法 5月月更

Go 语言入门很简单:Go 语言中操作 MySQL 数据库

宇宙之一粟

Go 语言 MySQL 数据库 5月月更

开源不易、安全慎行,中国软件如何走向文明?丨RTE 技术环境月报 202205

声网

开源 WebRTC RTE 编解码 技术环境月报

【ELT.ZIP】OpenHarmony啃论文俱乐部——大数据框架性能优化系统

ELT.ZIP

大数据 OpenHarmony 压缩算法 ELT.ZIP

『Python』题集⒋

謓泽

Python 5月月更

小红书持续打击炫富行为:自媒体行业不能违背公序良俗

石头IT视角

设计模式之工厂模式

乌龟哥哥

5月月更

【架构学习10】——毕业总结

tiger

架构实战营

RTC 系统音视频传输弱网对抗技术

融云 RongCloud

在线2进制8进制10进制16进制进制转换工具

入门小站

工具

开放报名 | 「RTC 进阶实战高手课」系列课程上线

融云 RongCloud

微博评论高性能高可用架构设计

小虾米

YUV数据分析

Loken

音视频 5月月更

kubernetes下的Nginx加Tomcat三部曲之三

程序员欣宸

Java Kubernetes 5月月更

【架构学习09】——电商秒杀系统

tiger

架构实战营

linux之history使用技巧

入门小站

Linux

Hoo网格量化策略 震荡市场中的投资利器

区块链前沿News

量化 Hoo 网格交易

融云 x DSPORT:拿下游戏社交「实时社区」第一滴血

融云 RongCloud

druid源码学习一

Nick

源码 Druid

区块链将掀开人类的新时代

CECBC

一文看懂Web3.0:元宇宙的基础设施,三大标签颠覆互联网

CECBC

Druid连接池源码阅读01

石小天

架构实战训练营毕业总结

刘帅

数据库连接池-Druid 源码学习(一)

wjchenge

初始化 Druid 源码、

带你从0->1学习双指针算法

工程师日月

5月月更

【ELT.ZIP】OpenHarmony啃论文俱乐部——云计算数据压缩方案

ELT.ZIP

云计算 OpenHarmony 数据压缩 ELT.ZIP

Web3:创作者经济的黄金时代

CECBC

druid源码阅读1——获取连接与释放连接

张大彪

在线TSV转多行数据工具

入门小站

工具

Kotlin 1.1新增协程、类型别名特性,提升了对JavaScript的支持_Java_Sergio De Simone_InfoQ精选文章