Kotlin 1.3.30 正式发布

Kotlin 1.3.30 正式发布,该版本主要覆盖 1.3 版本的问题修复和工具完善。版本更新的主要范围为 Kotlin/Native、KAPT 的性能优化以及对 IntelliJ IDEA 的支持优化。

相信更新内容见 版本更新日志.

我们也一如既往地感谢来自 外部贡献者的大力支持
。好,闲话少叙,我们进入正题。

KAPT 支持注解处理器增量编译

KAPT 已经支持注解处理器增量编译,该特性仍处灰度实验阶段,你可以通过在gradle.properties中添加以下配置来启用它:

需要指出的是,在现有版本中引入任何非增量编译的注解处理器或者依赖的变化(截止目前,包括内部声明的修改)都会导致该模块的注解处理过程退化为非增量模式。

后续我们也会持续跟进该项功能的完善,也恳请大家开始尝试并给出反馈~

KAPT: 其他提升

1.2.60 以来,我们引入了两个配置来提升编译性能。其一是使用 Gradle workers:

这个版本我们也对它做了优化。

另一个是 1.3.20 引入的,开启 Compile Avoidance,就是说依赖如果只有方法体发生变化,那么就跳过注解处理。只有在所有的注解处理器都显式的在注解处理的 classpath 声明的情况下,Compile Avoidance 才会生效,为此我们需要禁止在编译路径下搜索注解处理器以启用 Compile Avoidance:

在后续版本中我们会默认开启这两个配置,因此希望大家积极体验并给予反馈~

哦对了,我们现在支持的 Gradle 最低版本是 4.1,相应的 Android Graldle Plugin 则是 3.0。

标准库: 无符号数组的扩展方法

从 1.3 开始我们可以在实验模式下使用无符号数值类型。这个版本我们对无符号类型以及其数组做了更多的支持:

需要注意的是,我们之前就可以在无符号数组上使用函数式操作例如  filter  和  map ,这是因为无符号类型的数组实际上是实现了  Collection 接口的,例如  UIntArray  实现了  Collection<UInt> 接口。 不过这样就涉及到了性能问题,因为在 UIntArray 被当作 Collection<UInt>的实例使用时会额外 创建 一个对象出来。现在好了,所有新增的扩展函数都使用无符号数组类型作为 receiver 以消除额外的对象创建开销。因此不用担心,现在无符号数组和常规数值类型的数组从使用的角度来讲没有什么两样,不会有任何额外的开销了。

Kotlin/Native

Kotlin/Native 支持的目标平台有了新成员: Windows 32 位(mingw_x86)。除此之外,Windows 和 macOS 用户也可以交叉编译 Kotlin/Native 程序到 Linux x86-64、arm32 以及 Android 和 Raspberry PI 环境上。

我们也从编译器的层面修复了除0取余时的未定义行为,现在会直接编译报错。ARM32 和 MIPS 对齐相关的问题也得到了修复。

Kotlin/Native 对 Apple 平台的支持

对 Apple 平台的支持也有提升。iOS 上未处理的异常信息会被输出到 iOS 崩溃日志当中,iOS 和 macOS 上的异常堆栈(调试模式)也会包含符号信息。

现在也可以使用命令行参数  -Xstatic-framework  或者以下 Gradle 脚本来构建静态库:

Cocoapods

CocoaPods 也开始得到了 Gradle 插件的实验性质的支持。 它将 Kotlin/Native 工程转成  .podfile  依赖,这样就可以被引入到其他 Podfile当中。这样将使得开发者获得与用 Xcode 一致的开发体验,就像你过去用 Swift 和 Objective-C 的 pod 依赖一样。同样的,我们也让 Kotlin/Native 工程引入 CocoaPods 依赖变得更方便,这其中 Gradle 插件会帮我们完成所有必须的配置环节。

需要指出的是,现阶段拉取和编译这些依赖仍然需要一个 Xcode 工程。

运行  ./gradlew podspec  就可以生成一个  .podspec  文件用来引入到其他  Podfile  当中。引入一个 pod 依赖,可以使用  pod()  函数。

C interop

该版本开始支持返回结构体类型的回调函数,这意味着 staticCFunction可以返回 CValue<T> 类型了!例如我们可以调用一个 C 函数,传入另外一个返回值类型为结构体的 Kotlin 实现的 C 函数指针:

另外,还有以下更新:

  • C-99 bool 类型可以正确映射
  • UTF-32 C 字符串映射成 Kotlin String 类型
  • C 编译器内部函数映射到 platform.builtins 包中
  • 不再使用libffi 库
  • Objective-C interop 时支持 Clang 模块
  • C interop 描述文件 (.def) 获得 IDE 支持

Kotlin/Native IDE 支持

接下来我们同步下我们的 IDE 对 Kotlin/Native 的支持工作的进展。

除 IntelliJ IDEA 之外,我们也将发布 Kotlin/Native 插件支持 CLion 2019.1、AppCode 2019.1。C interop 描述文件 (.def) 后续也会得到所有 IDE 的支持,尽管目前代码补全功能还没有上线。

c-interop-def

对于 CLion and AppCode, 我们也支持了异常堆栈跳转源码的支持。

IntelliJ IDEA 支持

调试功能的提升

当你在调试协程代码时,你可以看到有一个单独的异步堆栈 “Async stack trace” 显示挂起时的变量。看一个例子:

当程序在 suspend 函数或者 Lambda(例子的第 13行)中的断点停止时, “Async stack trace” 显示了变量在上一次挂起时的状态(12行)。你可以浏览 suspend 函数在当前协程中从上一个挂起点的全部的堆栈 (第12、4行)并确认变量的值:

这会帮助你更方便的理解当前协程的运行状态。

在调试 Kotlin 代码时,你可以选择 “Kotlin” 模式来查看变量。点击 Kotlin icon,你就可以看到变量的 Kotlin 名字,而不是底层的 Jvm 名字:

你也可以添加变量到 watches,将 watches 和 variables 合在一起或是分开显示,随你便。

Scratch 文件的交互模式

在 Kotlin 当中,你可以用  scratch files来做些基于你的代码环境的小测试。现在你也可以开启交互模式,这样运行结果就可以在一定的延时后自动显示而无需手动运行:

其他特性提升

你会经常检查你的 TODO 项吗?IntelliJ IDEA 现在可以正确的高亮多行 TODO 注释了:

一些有用的检查和快速修复也会跟随这版本发布,例如对已经引入的类名的别名的自动引入的问题修复,以及对使用 Java 8 而不是 Kotlin 标准库的 ‘forEach’ 方法的警告。

Eclipse IDE 插件更新

Eclipse 插件 0.8.14 主要包含以下更新:Kotlin 1.3.30 编译器支持, 大量的问题修复和整体稳定性的提升。该版本也增加了对 Gradle 工程的实验性质的支持。你可以用 Eclipse Buildship 导入工程,你会发现 Kotlin 会被正常配置。

你可以通过  https://dl.bintray.com/jetbrains/kotlin/eclipse-plugin/last/ 安装对 Gradle 的实验性质的集成

从 help 菜单打开  Install new software 对话框,输入更新地址并且选择 Kotlin-gradle即可:

新 Gradle 集成也支持 Spring Tool Suite。你再也不用强迫自己用 maven 构建用 Kotlin 开发的 Spring 应用了。

指定 JVM 字节码版本为 9 – 12

如果你的程序运行在 JVM 9, 10, 11, 或者 12 等版本下,你可以设置 jvmTarget到对应的版本了。这个设置会影响生产的 class 文件的字节码版本,它们不是后向兼容的,这一点请注意。相比之下,新目标版本不会有任何字节码优化也不会有任何新特性,不过这种情况不会长久的。

如何更新

你可以到  play.kotl.in 上在线体验 Kotlin 新版本。

  • Maven, Gradle and npm: 修改编译器和标准库的版本为  1.3.30 。详细请参见 这里
  • IntelliJ IDEA 和 Android Studio: 更新 Kotlin 插件到 1.3.30。 使用  Tools | Kotlin | Configure Kotlin Plugin Updates 并点击 “Check for updates now” 按钮即可。
  • Eclipse: 在  Marketplace中安装插件。
  • 命令行编译器 可以在 Github release 页面下载。

一如既往地,如果遇到了什么问题,不要慌,到 中文论坛转一转,或者到 QQ 群里讨论下,如果英文比较好,也可以到官方论坛提问或者上 Slack (获取邀请链接 点这里) 讨论,还可以到 issue tracker 上提 issue.

Let’s Kotlin!

鸣谢

特别感谢来自 Google 的同事的对  KAPT 增量编译的支持

感谢社区的贡献者,大家都是最棒的 ~ 这其中特别要感谢的是:

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

2019 力扣杯-全国高校春季编程大赛

提升自我技术,享受编程魅力。力扣高校春季编程大赛现已面向全国高校学生开启

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

Kotlin 1.3.20正式发布

Kotlin 1.3.20的正式版终于来了,是1.3的bug及功能性更新的”补丁”。除了编译器及IDE的改进以外,该版本包括以下内容:

  • 允许在单个项目里并行执行Gradle任务
  • 允许通过Gradle Kotlin DSL构建多平台项目
  • 针对内联类的改进
  • 针对Kapt推出的独立命令行工具
  • Kotlin / JS默认启用增量编译
  • 针对Kotlin / Native的改进

继续阅读

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

Gradle Kotlin DSL 1.0

Gradle最近发布了5.0正式版,包含了满足大规模应用的Gradle Kotlin DSL v1.0

我们希望你能体验到Intellij IDEA和Android Studio上静态类型系统所带来的构建优势:自动补全、智能提示、文档指引、源代码导航和上下文感知重构。

示例视频

继续阅读

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

JetBrains 2018 中国巡演精彩集锦

转载自 『JetBrains 中国』:JetBrains 2018 中国巡演精彩集锦

2018年11月,JetBrains 在深圳、上海、北京相继举办了为开发者打造的一系列活动,在原本渐凉的冬日体会到了开发者内心的火热。这是 JetBrains 继2016年后再次进行的大规模公开技术分享活动,JetBrains 技术专家亲临现场并且实时为大家展示代码操作、讲演及答疑互动。一路走来,我们的希望从未改变:通过高智能的我们的工具,让开发者有更多时间和精神关注在成长、创新、和更多美好的事物上。

现在,就让我们跟随镜头再次回味这些精彩的内容:
继续阅读

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

官宣:Kotlin 1.3 网络研讨会

JetBrains将于今年12月举办两场关于 Kotlin 1.3 的网络研讨会。这两个活动旨在探索使用 Coroutines,Kotlin/Native 和 Multiplatform 开发项目的最佳实践和面临的挑战。

Andrey Breslav将在 QA 环节回答您对Kotlin 1.3的问题以及我们未来的计划。请在Twitter上使用#kotlinask_13 ,或在网络研讨会期间使用YouTube聊天提出您的问题。

Kotlin_Webinars_1920x1080_08 (1)

这两个活动都可以免费参加,并将在JetBrains TV YouTube 频道播出。要获得活动链接,请注册参加网络研讨会,我们将通过电子邮件通知您。

继续阅读

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

Ktor 1.0 正式发布:JetBrains 出品的互联应用框架

在我们开展Kotlin工作时,我们实现了很多特性,以便用于构建符合使用习惯且高效的API。我们始终期待着能有一个将这些特性发挥得淋漓尽致的Web框架。今天,我们终于可以说已构建了这样的框架!欢迎你,刚迈向成熟的Ktor1.0

Ktor是一个使用Kotlin在互联系统中构建异步服务器与客户端的框架 。由Kotlin团队创建,因此它充分利用了语言特性,为开发人员提供了出色的开发体验和运行性能。

Ktor完全是由协程构建起来的,使得编写复杂的异步代码简单得像同步代码一样。协程的运行也非常高效。同时,Kotlin的特性允许我们提供领域专用语言 (DSL) – 一种简洁且开发人员易于使用的API,用于配置应用程序,这些代码就像魔法一样神奇。

继续阅读

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

Kotlin 1.3 正式发布:Coroutine 『毕业』、Kotlin/Native 达成 1.0 Beta

Kotlin 1.3 在今天正式发布,伴随而来的还有一系列框架、构建工具和学习资料~

我们致力于将 Kotlin 打造成一个适用于不同场景,各种规模以及多个平台的优秀工具。在 Kotlin 1.3 当中,Coroutine 终于『毕业』了,异步非阻塞代码的可读性更高,且更易于维护。可扩展性更是如此唾手可得!同时 Kotlin/Native 也随着该版本的发布达到了 1.0Beta。跨平台开发已登陆所有被支持的平台,在跨平台框架的帮助下, Android 和 iOS 之间共享业务逻辑,服务端与前端、移动端共享逻辑,都将变得易如反掌。

1_3_banner_dark

继续阅读

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

JetBrains 中国巡演, Kotlin 开发专场

邀请您参加 JetBrains 开发者日中国巡演!

敬邀您参加在2018年11月12日~17日的“JetBrains开发者日-2018中国巡演”活动,我们将为广大开发者带来实用的技术干货,涵盖开发者所关心的话题并且与开发者面对面分享交流。活动期间,不仅我们的专家将会分享未来的计划、JetBrains 开发工具的实用案例和技巧,还有众多海内外专家为您带来各领域最顶尖的技术干货。

针对广大Kotlin开发者,我们在深圳和北京将邀请数位业内专家,为大家带来Kotlin开发者专场,希望为大家带来一场全面的开发盛宴,欢迎大家点击城市了解详细内容,报名参加,我们期待与您的面对面交流!

继续阅读

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

KotlinConf 2018 公告

在今天的 KotlinConf 2018 主题演讲上,我们发布了一系列的关于新版本、新资源、新功能的消息。实况视频如下:

继续阅读

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