Kotlin 1.2.70 发布

我们非常高兴地给大家带来了 Kotlin 1.2.70 的更新,这个版本主要修复了一些 Kotlin 1.2 的 bug 并优化了开发工具,主要包括:

  • Kotlin/JS 的增量编译性能得到了显著的提升
  • 使用 @OptionalExpectation对 kotlin-stdlib-common 中的一些注解进行了标注
  • Kotlin 编译器包含了使用 Excelsior JET 编译的二进制版本
  • IntelliJ IDEA 插件添加了新的用于重构、代码审查、代码提示等特性
  • 修复了很多编译器以及 IDE 中广为人知的问题,并进行了性能优化

这次更新兼容 IntelliJ IDEA 2017.3 – 2018.3 以及 Android Studio 3.1, 3.2 RC 和 3.3 Canary。

我们非常感谢这个版本中的外部的贡献者: Toshiaki KameyamaLucas SmairaRaluca SauciucDenis VnukovJonathan LermitageJake WhartongenTakasyBloderArtem ZinnatullinKenji TomitaNico Mandery, Juan Chen

完整的更新内容请参考 更新日志。下面是本次更新的一些重点内容。

Kotlin/JS 增量编译

Kotlin/JS 的增量编译得到了显著的提升,通过分析工程的结构,增量编译的构建速度将会达到 7 倍以上。另外,Kotlin/JS Gradle 编译也已经支持了跨模块增量编译。

需要指出的是,增量编译还在试验阶段,默认不会开启。如果你想要尝鲜,需要通过以下方式打开它:

  • 对于 Gradle 工程,在 gradle.properties 或者local.properties 中添加  kotlin.incremental.js=true
  • 对于 IntelliJ IDEA 的工程, 到 Settings -> Build, Execution, Deployment -> Compiler -> Kotlin Compiler -> Kotlin to JavaScript 中选中 Enable incremental compilation (experimental)

无论遇到什么有关 Kotlin/JS 增量编译的问题,请你及时反馈告诉我们。

Multiplatform 更新

kotlin-stdlib-common 中引入了许多平台相关的注解,并用 1.2.60 引入的 @OptionalExpectation 注解来标注它们。编译器将会在编译过程中忽略跨平台代码声明中的这些注解,尽管他们可能没有具体对应的实现。

例如,我们在跨平台代码中使用 Java 虚拟机专用的@JvmName注解,并将这些代码编译成 JavaScript 代码时不会遇到任何相关的问题。

前面提到的注解包括: @JsName@JvmOverloads@JvmStatic@JvmName@JvmMultifileClass@JvmField,

@JvmSuppressWildcards@JvmWildcard,@Volatile@Transient@Strictfp,

@Synchronized

IntelliJ IDEA 支持优化

『快速修复(Quick Fix)』可以将集合框架的函数调用转换为序列(Sequence)。

我们现在可以通过『快速修复』将集合框架的变化操作转换为等价的懒序列变换,这样可以减少不必要的开销,对于一些比较复杂的场景将会有显著的性能提升。

IntelliJ IDEA 插件的其他优化点:

  • 将 if 判断替换为 ?.let 以及其他类似的操作的提示
  • 减少冗余的 with 调用的代码检查
  • 将属性转换为 getter 转换为初始化操作的提示
  • 将 assertTrue(a == b) 替换为 assertEquals(a, b) 的代码检查和快速修复
  • “Redundant return label” 检查
  • 默认参数值移除的快速修复
  • forEach parameter unused” 检查
  • 很多问题修复和性能提升

二进制版本的 Kotlin 编译器

Github releases 里面除了 Java 虚拟机版本的 Kotlin 编译器之外还提供了主流操作系统(Linux、macOS、Windows)下的二进制版编译器。它采用  Excelsior JET 编译,具有启动速度快的优点,更适用于小文件的编译和脚本的运行。

Excelsior JET 版本的运行时支持一些 JVM 上的以及一些特定的选项,通过 -J 传给 kotlinc 即可。所有支持的参数请参加 Excelsior JET 说明文档

如何更新

你可以通过设置中的 Tools -> Kotlin -> Configure Kotlin Plugin Updates 中的 『Check for updates now』 按钮更新 IntelliJ IDEA 和 Android Studio 的 Kotlin 插件,Eclipse 的插件可以在 Eclipse Marketplace 中更新(请在 Help -> Eclipse Marketplace 中搜索 Kotlin 插件)。

当然,不要忘了更新你的工程中 Maven 和 Gradle 脚本中的 Kotlin 编译器和标准库的版本。

如果你遇到任何问题,欢迎来我们的论坛 [英文 中文]中提问,也可以加入 Slack 频道的讨论 (在这里获得邀请),或者在 issue tracker 当中提交问题。

Let’s Kotlin!

原文:Kotlin 1.2.70 is Out!

发表在 官方博客 | 留下评论

Native v0.8 released

我们很高兴地宣布Kotlin/Native 0.8版本正式发布,这个版本的重点如下:

  • 更安全的协程编写方式
  • 扩展了标准库功能
  • 更好地支持IOS开发

此外该版本还修复了大量的bug及优化了性能。
继续阅读

发表在 官方博客 | 留下评论

Kotlin 1.2.50 is out!

我们很高兴地正式发布Kotlin 1.2.50,一个针对Kotlin 1.2的bug修复和功能性更新的版本。

该正式版的主要更新内容:

  • Eclipse IDE的Kotlin插件得到了更新
  • 在标准库的公共及JS部分添加了新函数
  • 我们为kotlin.test带来了最新的JUnit 5
  • 改善了对实验性脚本的支持
  • 在IntelliJ IDEA中引入了可运行Kotlin scratch文件
  • 现在kapt及使用Gradle构建Android项目时的速度变得更快了
  • 通过二进制兼容模式以支持实验性的\@JvmDefault
  • 引入了渐进编译模式
  • 修复编译器及IDE插件大量已知的问题,同时其性能也有所提升

继续阅读

发表在 官方博客 | 留下评论

构建Recyclerview DSL

作者:RetroX
原文链接:https://github.com/life2015/RecyclerViewDSL/blob/master/README_ZH.md

接文章 DSL in action

上一篇文章说了如何把DSL用在项目的布局中,而这篇文章来讲讲怎么把DSL用在Recyclerview中。此框架已经在我的项目中大规模使用,并且极大地提高了Recyclerview列表构建效率和复用能力。
继续阅读

发表在 转载文章 | 标签为 | 留下评论

Embedding Kotlin Playground Tips

在文章Embedding Kotlin Playground中,我们可以看到很多可以运行的Kotlin代码。然而文中我们只能看到实际应用的效果,到底该怎么去应用这个功能呢,下面作简单的介绍。
继续阅读

发表在 官方博客附加品 | 标签为 | 2条评论

Extension In Action

去年的Google IO大会让Kotlin语言大火,大量开发者尝试使用Kotlin进行开发,然而很多人抱怨道:“Kotlin有什么好的啊?没有什么感觉啊?不就是一些语法糖吗?”… 究其原因,很多人依然在写着Java Style的Kotlin,并没有尝试着去感悟kotlin的语法糖背后的设计思维,以及如何将那些语法特性运用在生产环境的项目中。

最近的一些时间,我们在使用Kotlin对项目基础架构进行重新设计,于是在这篇文章写下我们的心得体会~

导读:

继续阅读

发表在 转载文章 | 标签为 | 留下评论

DSL In Action

伴随着Kotlin的发展,有一个神奇的框架anko-layout,一直存在于我们的视野却又一直因为各种原因无法用于生产环境中。最近在写项目时,再次拿出anko这个框架,思考它在UI小组件上的可用性。

PS: Anko != Anko_Layouts ,但是为了表述方便,文中一部分Anko是代指这Anko Layouts框架,大家自己理解一下~

概述

关于Anko-Layouts框架的好处和局限性,网上已经有大部分文章在讲,它好在用DSL的方式来描述View,而缺点在于无法即时预览,在这方面导致Anko DSL的开发效率不及XML传统方式。经过大家的一些踩坑,以及开发上的试用,一致表示,Anko Layouts无法用在成熟的项目之中,还是老老实实用XML吧…

Anko Layouts的DSL设计那么棒… 就要这么放弃了吗
继续阅读

发表在 转载文章 | 标签为 | 一条评论

Embedding Kotlin Playground

没错,这是一段可以嵌入到博客中独立运行的kotlin代码。要注意的是,您还能修改其中的代码,而不只是让它运行起来。

这很酷,不是吗?让上述代码也顺利工作起来吧。
继续阅读

发表在 官方博客 | 2条评论