前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Kotlin 1.2 有哪些值得关注的点?

Kotlin 1.2 有哪些值得关注的点?

作者头像
bennyhuo
发布2020-02-20 13:22:24
4230
发布2020-02-20 13:22:24
举报
文章被收录于专栏:BennyhuoBennyhuoBennyhuo

引子

Kotlin 1.2 的发版节奏越来越快了。从 16 年 2 月 19 日发布 1.0 到 17 年 3 月 14 日发布 1.1,这次只花了半年多的时间,厉害了。1.1 发布的时候让人比较激动的是有了协程这样一个杀手级的特性,以及正式支持的 JavaScript Target,那么现在半年过去了,Native 搞得风生水起,1.2 又会给我们带来什么呢?

跨平台新特性

Kotlin 官方的这个跨平台的概念,大家要与 RN 这类深度定制的框架区别开来,Kotlin 的跨平台范畴只在逻辑代码层面 —— 当然,如果有哪个第三方针对不同平台的 API (例如 UI)做了适配,那么就有了 Kotlin 版本类似 “RN” 这样的东西,那是另一码事了。

看图就知道,这个跨平台的思路其实与 C++ 跨平台的思路很像,我们只写通用逻辑来跨平台,至于一些与平台交互紧密的部分,使用相应的 Native 代码完成就好了。

例如我要写一个图像识别的算法实现,这个算法是通用的,也基本上不依赖平台的 API,我就把它写到 Common 这个模块当中,那么你可以选择把我这个模块的代码编译成 Java 虚拟机字节码,或者 js,甚至将来的机器码,就这样代码就实现了复用,很轻松的那种复用。

这事儿要放到之前,还是有些麻烦的,作为一门语言本身,Kotlin 有自己的标准库,但标准库本身也是与平台挂钩的。所以在 1.2 之前如果你想要做到复用,那么你需要小心,你的算法里面用到 java.lang.Math 这个类了么?JavaScript 里面可没有一个完全相同的类啊。所以在 1.2 当中,Kotlin 启用了一对儿关键字: expectactual ,方便通用模块使用平台模块中提供的平台相关的实现,这里就不具体展开啦。

这个特性现在看来其实还不算多么强势,可能要等到对 Kotlin Native 支持之后,同样一段逻辑代码可以很方便地在 Java 虚拟机和 C 环境下切换,那么 Android 和 iOS 除了一些平台相关的 UI 之类的东西还需要分开写,其他的可以直接共享。所以这一招很有意义。

后面有空的话我也会专门写一篇文章介绍这个内容。

协程还是实验特性

协程是 1.1 开始支持的,我写第一篇文章介绍协程的时候还没有标上 “experimental”,结果过了几天回来一看,嘿,以前的代码都编不过了,所有的包名都在原有的基础上做了调整 —— 这是发生在今年过年那几天的事儿。

当时原本以为 1.2 就可以去掉 “experimental”,官方当时也表示基本大概差不多会在 1.2 转正,然而并没有。原因吧,我觉得一方面是标准库的 API 倒是没啥毛病,但作为普通开发者必备的 kotlinx.coroutines 对于 JavaScript 的支持还没断奶;再一个就是,Kotlin 协程 API 和 协程库的使用率不高,这个也跟它本身对大家(”大家“主要是 Android 开发者)来说是一个不太常见的东西有关系。

反正就是还没有正式毕业吧,但作为实习生,Kotlin 的协程本身在 Jvm 上面的表现已经很稳定了,投入生产没毛病,就算将来转正,API 也会在一段时间内保持兼容,大可不必担心。

可以直接创建 Kotlin DSL 的 Gradle 工程

安装 1.2 插件之后,我们发现 IntelliJ 开始允许大家创建 Kotlin DSL Gradle 工程,这意味着,Kotlin DSL 作为 Gradle 的脚本语言已经可以正式在生产环境中使用啦。尽管我在生产环境中暂时还不会选择这个构建工程,不过,谁知道几个月之后会不会呢。

Kotlin 的发版节奏在加速

  • Kotlin 的 1.0 版是一个重要的版本(废话),所以从 Github 上的第一笔提交到发版用了 5 年半的时间
  • 1.1 用了 13 个月
  • 1.2 用了 8 个月
  • 1.3 呢?明年清明节?

Kotlin 尽管版本迭代的速度明显变快,但产出也基本符合预期,比如今年拿出来的 Native(最近已经 0.4,并开始有 IDE 支持) 和跨平台特性,很不错。后续 Jvm 上面的新特性迭代应该放缓了,主要以维稳为主;JavaScript 的工作量也还是有的,例如协程、反射等的完善,以及对生态的更好的支持之类;Native 应该算是一个发力点,所以后面我觉得大家应该重点期待一下这个。

当然,现在人工智能这么火,也许出一套 Kotlin 版本的 TensorFlow 的 API (不要 Java 那个的),也许会比较有意思。

其他

1.2 当然也优化了编译的性能,也支持了注解当中数组的语法,增加了对 lateinit 类型变量是否初始化的判断等等,这些内容比较细节,我们就不在这里啰嗦了。


本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-11-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Kotlin 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 引子
  • 跨平台新特性
  • 协程还是实验特性
  • 可以直接创建 Kotlin DSL 的 Gradle 工程
  • Kotlin 的发版节奏在加速
  • 其他
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档