Kotlin 1.2:平台之间共享代码

前言

这是一个尝试,之前没有翻译过任何技术文章,做一个尝试,也算是学习,尽管现在这个译文在网上已经是满天飞了。

原文地址Kotlin 1.2 Released: Sharing Code between Platforms

正文

今天,我们将要发布 Kotlin 1.2。这是一个重要的新版本和一个大的步伐在我们朝着使用 Kotlin 在现代应用程序中的道路上。

在 Kotlin 1.1 中,我们正式的发布了 JavaScript 目标,允许你去编译 Kotlin 代码成为 JS 并且运行在浏览器上。在 Kotlin 1.2 中,我们将要添加 JVM 和 JavaScript 的代码重用成为可能。现在你可以写一次应用程序的逻辑代码,而在你的应用程序中所有层重用它——后端,浏览器前端和Android移动应用。我们也会在库上进行工作,帮助你重用更多的代码。比如跨平台库。

https://d3nmt5vlzunoa1.cloudfront.net/kotlin/files/2017/11/cake3-1.png

Kotlin 1.2 是已经绑定在 IntelliJ IDEA 2017.3中,将会在本周发布。如果你正在使用的是 Android Studio 或者 一个旧版本的 Intellij IDEA,你可以从 Tools | Kotlin | Configure Kotlin Plugin 更新框中安装新的版本。

这个版本包括了大量外部贡献者的工作,并且我们想感谢向我们反馈,提交问题和尤其是提交了PR的每个人。

一个多平台项目允许你编译在你的应用程序的多层 —— 后端,前端和Android应用 —— 在相同的代码基础上。这样的一个项目包含了 相同模块,与平台无关以及特定平台的模块,包含了特定平台的代码( JVM 或者 JS )和使用了特定平台的库。从通用模块调用特定平台的代码,你可以指定预期的声明——所有平台特定模块需要提供实际实现声明。

https://d3nmt5vlzunoa1.cloudfront.net/kotlin/files/2017/11/MPP.png

有关该功能的更多信息,请查看这个文档

如前所述,我们也在编写一组公共库允许你将更多的逻辑代码转移到公共代码:

  • kotlin.test,包括开箱即用的Kotlin1.2,让你写一次测试并且运行在JVM 和 JS 下;

  • kotlin.html支持 同构渲染 — 用相同的代码渲染 HTML 在后端和在前端;

  • kotlinx.serialization允许你轻松的对 Kotlin对象编组在你的应用程序的不同的层之间,使用 JSON 或者 ProtoBuf 进行序列化格式化。

请注意,多平台项目目前是一个实验性功能;这意味着这个功能是准备使用,但是我们也许需要去改变设计在之后的版本(并且如果我们这样做,我们将会提供代码迁移工具)。

在1.2的发展过程中,我们花费了很多精力来使编译过程更快。我们已经比Kotlin1.1提高了大约 25% 并且我们看见进一步改进的巨大潜力,它将会在发布在 1.2.x的更新中。

下方的图片展示了两个用Kotlin的大型JetBrains项目不同的编译时间: https://d3nmt5vlzunoa1.cloudfront.net/kotlin/files/2017/11/CompilationSpeed.png

我们也做了许多小的改进在语言和标准库:

  • 更简洁的语法 用于将多个参数传递给注解(数组 文字(literals)) 不知如何翻译literals 译者注

  • 支持 lateinit 修饰在全局属性和局部属性,以及检查一个 lateinit 是否被初始化;

  • 更加聪明的智能推导改进的类型推断在一些情况下。

  • 标准库和 Java9 中引入的分包限制的兼容;

  • 新的 kotlin.math包在标准库中;

  • 新的标准库函数在处理序列和集合,包含了一组函数 为了拆分集合和序列为可能重叠的固定大小的组。

更多的信息和代码示例,请看 Kotlin1.2中新功能

自从今年3月发布的Kotlin1.1以来,Kotlin已经取得了巨大的收获在世界各地。这是 KotlinConf 的高潮,我们第一次全球会议,有着1200参会者在11月2,3日的旧金山。我们已经记录了所有的会谈,并且视频已经可以看

Kotlin现在是一个Android开发官方支持的语言,开箱即用的Android Studio 3.0,已经谷歌发布了官方示例风格指南。结果是,在Android Studio中超过了 17% 的项目使用 Kotlin,包含来自很多热门的创业公司以及财富500强公司的许多应用程序。

https://d3nmt5vlzunoa1.cloudfront.net/kotlin/files/2017/11/KotlinConfUsers.jpg

在服务器端,Spring 5.0 已经发布,有着许多Kotlin支持的功能,而且 vert.x 已经支持Kotlin在3.4.0后。当然,Gradle支持开箱即用Kotlin DSL,而且 Gradle Kotlin DSL 项目正在迅速的接近1.0版本。

在Github上,开源的Kotlin代码行数已经超过了2.5亿。而在 Stack Overflow,Kotlin是增长最快的语言之一和最不反感的语言之一

https://d3nmt5vlzunoa1.cloudfront.net/kotlin/files/2017/11/KotlinAdoption.png

围绕Kotlin的社区建立同样也是令人吃惊的,已经有超过100用户组在全世界,我们很难追踪到所有的人 —— 但是针对我们所知道的,这个会谈地图给了你一个很好的想法,kotlin是多么广泛的使用。

https://d3nmt5vlzunoa1.cloudfront.net/kotlin/files/2017/11/KUGmap.png

对于刚刚学习Kotlin的人来说,书籍的数量是不断的增长(包含我们自己的 “Kotlin in Action”,现在有英文俄语日语中文葡萄牙语),线上课程,教程和其他资源

分享你更多的信息关于新版本,我们计划组织一个网络研讨会关于Kotlin1.2多平台项目在12月7日,18:00 CET。请注册;空间有限。

Kotlin团队也将会举办 AMA(Ask Me Anything) 在 Kotlin Reddit 上在12月5号。我们将开始中午开始(CET),并且我们接下来的24小时和你在一起。

一如既往,你可以在线尝试Kotlintry.kotlinlang.org

  • 在 Maven,Gradle和npm中:使用1.2.0作为编译器和标准库的版本号。看这里

  • IntelliJ IDEA:2017.3已经和Kotlin1.2绑定,在早期版本中安装或者升级 Kotlin 插件到1.2.0版本。

  • Android Studio:安装或者升级插件通过 Plugin Manager

  • Eclips:安装插件在 MarketPlace

  • 命令行编译可以从Github发布页面上下载。

兼容性 在Kotlin1.2的语言和标准库是向后兼容的(模块错误):如果一些编译和运行在1.0或者1.1,将会继续在1.2上运行。帮助逐渐共享的打团队,我们将提供不使用新特性的编译开关。这里是一个包含可能的缺陷文档

相关内容