PCon全球产品创新大会9折购票中,立减¥480!查看上线日程 了解详情
写点什么

JetBrains 发布 Kotlin 1.2.30

2018 年 3 月 19 日

看新闻很累?看技术新闻更累?试试下载 InfoQ 手机客户端,每天上下班路上听新闻,有趣还有料!

最近,JetBrains 发布了 Kotlin 1.2.30。该版本是在 1.2.20 版本发布一个半月之后,作为 bug 修复和工具更新而发布的。新特性包括:

  • 增加新的协程函数 suspend。
  • 支持 Gradle 的构建缓存
  • 在 IDE 方面支持最新的 Kotlin 风格指南
  • 新的检查器、性能改进以及 IntelliJ 插件的 bug 修复。
  • kotlin.test 包支持 TestNG。

IntelliJ IDEA 2017.1、2017.3、2018.1 EAP 以及 Android Studio 3.0 均支持这些新特性。下面列出了一些主要的特性。

多平台项目

Kotlin 的多平台项目特性是在 2017 年 11 月份的 1.2 版本中引入的,可以将原始代码编译成多个平台的目标代码,目前支持 JVM 和 JavaScript。

正如官网所述:

借助多平台项目特性,开发者可以基于代码基库构建应用程序的各个层,包括后端、前端和 Android 应用。一个项目同时包含了公共模块和平台相关的模块,公共模块包含了跨平台的代码,而平台相关模块包含平台特定的代码(如 JVM 或 JS)。如果要在公共模块中调用平台模块的代码,可以先声明,然后在平台模块中实现这些声明。

常规的 Kotlin 项目可以使用 Gradle 和 Maven 构建,但多平台项目只能使用 Gradle 构建。下面是用来构建基本公共模块的 build.gradle 文件:

复制代码
buildscript {
ext.kotlin_version = '1.2.30'
repositories {
mavenCentral()
}
dependencies {
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
}
apply plugin: 'kotlin-platform-common'
repositories {
mavenCentral()
}
dependencies {
compile "org.jetbrains.kotlin:kotlin-stdlib-common:$kotlin_version"
testCompile "org.jetbrains.kotlin:kotlin-test-common:$kotlin_version"
}

多平台项目目前还只是个实验性的特性。JetBrains 方面表示,该特性在未来版本的 Kotlin 中可能会发生变更,如果有必要,他们会提供迁移工具。

标准库中新增的函数

为了更好地使用协程,标准库中新加了一个函数:

复制代码
public inline fun <r> suspend(
noinline block: suspend () -> R
): suspend () -> R = block
</r>

新函数对另一个函数进行了包装,作为协程的挂起函数。例如:

复制代码
suspend {
val result = deferredResult.await()
renderResult()
}.startCoroutine(completion)

新函数为 Kotlin 在 lambda 表达式中使用 suspend 标识符奠定了基础。

Kotlin 风格指南

IntelliJ IDEA 支持 Kotlin 最新的风格指南,另外还为 Android 提供了一份相应的风格指南。风格指南提供了建议使用的编码约定,包括代码结构、命名规则、格式化、文档化注释和语言特性的使用方式。

对于Kotlin 和Java 混合项目,风格指南建议将代码按照Gradle 或Maven 的结构目录进行区分。例如, kotlin-examples GitHub 项目的部分目录结构是这样的:

编译性能改进

第一项改进是支持 Gradle 的构建缓存。Gradle 从 4.3 版本开始就支持重用构建输出:

Gradle 的构建缓存通过重用其他 Gradle 构建的输出结果来节省时间。构建缓存被保存在本地或远程服务器上,如果输入没有发生变化,那么其他构建就可以从缓存中拉取输出结果,而不需要重新生成这些内容。

不过,在使用 Kotlin 的注解处理器 kapt 时,并不建议使用构建缓存,因为 Gradle 无法准确地追踪注解依赖。默认情况下这一功能是被禁用的,如果有必要,可以在 Gradle 构建脚本中启用它:

复制代码
kapt {
useBuildCache = true
}

第二项改进是在 Kotlin 和 Java 混合项目中,可以更准确地检测出 Java 代码的改动,而不需要重新编译未改动过的 Kotlin 代码。不过这只是个实验性的特性,默认情况下也是被禁用的,可以通过在 gradle.properties 文件中添加一个属性来启用它:

复制代码
kotlin.incremental.usePreciseJavaTracking=true

其他资源

查看英文原文: JetBrains Releases Kotlin 1.2.30

2018 年 3 月 19 日 19:002302
用户头像

发布了 731 篇内容, 共 380.9 次阅读, 收获喜欢 1892 次。

关注

评论

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

脑洞:基于DDD进行组织架构治理

Winfield

组织转型 领域驱动设计 DDD

Summary

Kiroro

阿里取消周报,打击低效加班!HR透露6大原因!

程序员生活志

阿里 周报

架构师Week7作业1

Nan Jiang

架构师Week7作业2

Nan Jiang

一文入门DNS?从访问GitHub开始

Kerwin

后端 DNS DNS服务器

lambda基本使用

Bruce Duan

Lambda

go defer 的使用和陷阱

曲镇

Go

GitHub宣布已将所有代码永久封存于北极地底1000年!网友炸锅了:我写的bug终于能流传永世了!

程序员生活志

GitHub 程序员

新站上线通知

Damon

云上自动化 vs 云上编排

华为云开发者社区

云计算 云原生 云服务 云主机 华为云

余生很贵,请别浪费

程一初

Python

你在寻找本地部署的后台测试工具吗?

测试那些事儿

List 如何一边遍历一边删除

Bruce Duan

List删除元素

揭秘 vivo 如何打造千万级 DAU 活动中台 - 启航篇

vivo互联网技术

vue.js 中台 Vue 业务中台

Week 07 学习总结

Jeremy

SQL查找还在用count吗?

Bruce Duan

SQL查询是否存在

k8s 上运行我们的 springboot 服务之——flume 读取kafka数据批量同步到clickhouse

柠檬

kafka Clickhouse

Java 基础

Bruce Duan

java基础

爱币(LOVE COIN)全球同步耀世上线,掀起币圈追捧热潮

Geek_116789

第七周作业

晨光

第七周总结

晨光

SpringBoot教程:MyBatis多数据源配置

Bruce Duan

mybatis SpringBoot 2 多数据源配置

1. 初识Jackson -- 世界上最好的JSON库

YourBatman

json Jackson Fastjson

如何优雅的实现一个过滤器

废材姑娘

spring

JVM系列之:Contend注解和false-sharing

程序那些事

Java JVM 性能调优 GC

ChaosBlade:从零开始的混沌工程(四)

郭旭东

云原生 混沌工程 ChaosBlade

作业一

Kiroro

一文吃透时间复杂度和空间复杂度

书旅

数据结构 算法 时间复杂度 数据结构与算法

干货分享丨玩转物联网IoTDA服务系列五-智能家居煤气检测联动

华为云开发者社区

人工智能 物联网 IoT 智能设备 华为云

程序设计的一种思路:DDD

再见小飞侠

方法论 DDD 软件设计

JetBrains发布Kotlin 1.2.30-InfoQ