Kotlin 1.2 里程碑版本正式发布,编译器和标准库日趋稳定
原文:Kotlin 1.2 M2 is out
作者:Alexey Sedunov
翻译:顾浩鑫
审校:苏宓,欢迎技术投稿、约稿、给文章纠错,请发送邮件至[email protected]。
近日,JetBrains 开发者 Alexey Sedunov 在其官方博客上正式宣布 Kotlin 1.2 第二个里程碑版本发布。这个版本的主要关注点是 Kotlin 编译器和工具的稳定性及 bug 的修复,以及对 Kotlin 标准库的改进。它同时也包含了很多在即将发布的 Kotlin 1.1.4 版本中所具备的工具特性。
从 1.2 M1 版本之后的完整修改记录可以在这里查看,下面将列出一些主要的变化。
编译器
重大修改:Java-default 方法调用
到目前为止,Kotlin 接口成员重写 Java-default 方法,如果目标运行时是 JVM 1.6 的话会在编译时产生一个警告:Kotlin 子类中对父类 Java-default 方法的调用在 JVM target 1.6 已经废弃,请重新使用 -jvm-target 1.8
参数进行编译。在 1.2-M2 版本中我们使用错误来代替警告,因此要求所有这类代码都使用 -jvm-target 1.8
参数进行编译。
标准库
修正 windowed/pairwise 操作
我们已经听取大家关于 KEEP-11(https://github.com/Kotlin/KEEP/blob/master/proposals/stdlib/window-sliding.md) 中 chunked/windowed/pairwise 函数的反馈,这些函数是在前一个里程碑 1.2-M1 中作为预览功能发布的,在这个基础上我们决定对这些函数做一些修改:
-
windowed
函数现在拥有一个默认值为 1 的步进参数,同时也增加了一个额外的可选参数partialWindows
,用来控制如何处理最后不完整的窗口。默认情况下它是 false,表示丢弃不完整的窗口。 -
pairwise
的函数名太令人困惑,从名字看不出来它如何将元素组合在一起。现在它被称为zipWithNext
,从名字可以更清楚的看出这个函数的操作是将集合中每个元素和下一个元素做压缩处理。
标准库中的通用数学操作
长期以来要求在标准库 KT-4900(https://youtrack.jetbrains.com/issue/KT-4900) 中支持数学操作的请求不绝于耳。直到现在在 JVM 平台上我们只能求助于 java.lang.Math
类提供的数学函数和常量,在 JS 平台上只能求助于 kotlin.js.Math
暴露的原生 JS 数学函数给 Kotlin 代码。但是,现在我们将介绍 kotlin.math
包中的下列 API 组合:
- 常量:
PI
和E
- 三角函数:
cos
,sin
,tan
和它们的反操作:acos
,asin
,atan
,atan2
; - 双曲线函数:
cosh
,sinh
,tanh
- 幂函数:
pow
(扩展函数),sqrt
,hypot
,exp
,expm1
- 对数函数:
log
,log2
,log10
,ln
,ln1p
- 取整函数:
-
ceil
,floor
,truncate
,round
(half to even,译者注:向最接近数字方向舍入的舍入模式,如果与两个相邻数字的距离相等,则向相邻的偶数舍入)函数 ; -
roundToInt
,roundToLong
(half to integer) 扩展函数。
-
- sign 和绝对值
-
abs
和sign
函数 -
absoluteValue
和sign
扩展属性 -
withSign
扩展函数
-
- 对两个数字进行比较操作的
max
和min
- 二进制表示
-
ulp
扩展属性 -
nextUp
,nextDown
,nextTowards
扩展函数 -
toBits
,toRawBits
,Double.fromBits
(这些函数位于kotlin
包中)
-
对于 Float
参数也提供了同样的函数集(除了常量),这些函数大多数在 JS 中也可用(除了二进制表示中的函数),从而解决了需要为不同平台编写两套相同计算代码的问题。
预发布声明
与其他里程碑版本一样,我们不会为新语言和库特性提供向后兼容性的保证。在 1.2 的里程碑版本中引入的任何东西在 1.2 的最终版本发布之前都会发生更改。当我们到达最终的 RC 版本,通过预发布版本生成的所有二进制包都会被编译器认为不合法:你将被要求重新编译之前使用 1.2-Mx 版本编译过的任何代码。当然所有使用 1.1.x 版本或者更早发布版本编译的代码不需要重新编译也可以完美的运行。
如何尝试
在 Maven/Gradle 中:在工程的构建脚本中添加 http://dl.bintray.com/kotlin/kotlin-eap-1.2
作为 repository,并将 Kotlin 编译插件和标准库的版本号修改为 1.2-M2
。
在 IntelliJ IDEA 中:点选菜单 Tools → Kotlin → Configure Kotlin Plugin Updates,接着在 Update channel 下拉列表中选择 “Early Access Preview 1.2”,然后点击 Check for updates。
命令行编译器可以在 Github 发布页面(https://github.com/JetBrains/kotlin/releases/tag/v1.2-M2)进行下载。
在 try.kotlinlang.org(https://try.kotlinlang.org/) 中:使用右下角的下拉列表可以更改编译器的版本为 1.2-M2(即将开放)。