【ArchSummit架构师峰会】探讨数据与人工智能相互驱动的关系>>> 了解详情
写点什么

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:003188

评论

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

在 pygame 中好好玩玩精灵,滚雪球学 Python 游戏番

梦想橡皮擦

10月月更

2021年Android程序员职业规划,Android开发技巧

android 程序员 移动开发

DeFi流动性挖矿系统开发资料(源码)

2021最新中高级Android面试题目,2021必看

android 程序员 移动开发

Apache APISIX 助力有赞云原生 PaaS 平台,实现全面微服务治理

API7.ai 技术团队

云原生 PaaS API网关 Apache APISIX

2021年大厂程序员进阶宝典,Android开发基础面试题

android 程序员 移动开发

2021年大厂程序员进阶宝典,真是经典中的经典

android 程序员 移动开发

掘金万亿新IT服务大市场,联想智慧服务核心能力持续跃升

科技大数据

Defi挖矿系统开发简介(现成案例)

Vue进阶(幺肆伍):Vue-elementUI实现操作栏位更多效果

No Silver Bullet

Vue 10月月更

第 22 章 -《Linux 一学就会》- 跳出循环-shift参数左移-函数的使用

学神来啦

Linux linux运维 linux云计算 linux一学就会

2021年Android大厂面试分享,实战篇

android 程序员 移动开发

2021年Android春招面试经历,阿里秋招面试真题解析

android 程序员 移动开发

2021年大厂程序员进阶宝典,flutter面试题

android 程序员 移动开发

Python代码阅读(第43篇):构造组合函数

Felix

Python 编程 Code Programing 阅读代码

2021年Android高级面试题,成功入职字节跳动

android 程序员 移动开发

2021年GitHub上那些优秀Android开源库总结,花2万块买的教程

android 程序员 移动开发

2021高级Android笔试总结,帮你解决95%以上的问题

android 程序员 移动开发

4面阿里拿到P7Offer,Android开发指南

android 程序员 移动开发

揭开MySQL Volcano模型迭代器性能提升千倍的秘密

华为云开发者联盟

MySQL 数据库 华为云数据库 MySQL Volcano 模型迭代器

Vue进阶(幺肆肆):(window,parent,opener,top).location.reload方法分析

No Silver Bullet

Vue 页面刷新 10月月更

DeFi智能合约DAPP系统开发公司(现成)

全球6G专利独占4成,中国能否借此“制霸”元宇宙?

海比研究院

阿里云边缘云ENS再升级 产业数字化落地向何方?

阿里云Edge Plus

2021年字节跳动+京东+美团面试总结,查漏补缺

android 程序员 移动开发

2021最值得加入的互联网公司有哪些,阿里三面

android 程序员 移动开发

2020-2021蚂蚁金服Android面试真题解析,使用指南

android 程序员 移动开发

2021年来看看Android的发展,程序员如何应对中年危机

android 程序员 移动开发

2021最新Android常用开源库总结,retrofit源码

android 程序员 移动开发

解密诡异并发问题的幕后黑手:可见性问题

华为云开发者联盟

并发编程 线程 并发 可见性 单核CPU

Groovy动态添加方法和属性及Spock单测

FunTester

Java 动态 spock Groovy FunTester

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