Kotlin 新版来了,支持跨平台!
来源:开发者技术前线
作者:Tamic | 编辑: 可可
谷歌在今年的 I/O 大会上宣布,Kotlin 编程语言现在是 Android 应用程序开发人员的首选语言(谷歌宣布 Kotlin 成为安卓开发首选)。
还有一个好消息, Kotlin 1.3.30 正式发布,做了对apple的支持。离上次发布1.3 时间过去半年。本次的该版本主要覆盖 1.3 版本的问题修复和工具完善。版本更新的主要范围为 Kotlin/Native、KAPT 的性能优化以及对 IntelliJ IDEA 的支持优化。
我们来回顾下 1.3的 新特性
稳定的协程
Kotlin/Native Beta
多平台项目和工具
用于 Kotlin/Native 和多平台的工具
Ktor 1.0 Beta
本次版本带来的牛逼特性主要对1.3完善,并且做了工具上的支持。
KAPT 支持注解处理器增量编译
KAPT 已经支持注解处理器增量编译,该特性仍处灰度实验阶段,你可以通过在gradle.properties
中添加以下配置来启用它:
kapt.incremental.apt=true
需要指出的是,在现有版本中引入任何非增量编译的注解处理器或者依赖的变化(截止目前,包括内部声明的修改)都会导致该模块的注解处理过程退化为非增量模式。
KAPT: 其他提升
引入了两个配置来提升编译性能。其一是使用 Gradle workers:
kapt.use.worker.api=true
这个版本也对它做了优化。另一个是 1.3.20 引入的,开启 Compile Avoidance,就是说依赖如果只有方法体发生变化,那么就跳过注解处理。只有在所有的注解处理器都显式的在注解处理的 classpath 声明的情况下,Compile Avoidance 才会生效。
无符号数组的扩展方法
从 1.3 开始我们可以在开发模式下使用无符号数值类型。这个版本我们对无符号类型以及其数组做了更多的支持:
fun main() {
val u1 = 2_147_483_649u
val u2 = 4_000_000_000u
println(u1.toDouble())
println(minOf(u1, u2))
val array: UIntArray = uintArrayOf(u1, u2)
println(array.max())
println(array.all { it > Int.MAX_VALUE.toUInt() })
}
需要注意的是,我们之前就可以在无符号数组上使用函数式操作例如 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 环境上。
Kotlin/Native 对 Apple 平台的支持
对 Apple 平台的支持也有提升。iOS 上未处理的异常信息会被输出到 iOS 崩溃日志当中,iOS 和 macOS 上的异常堆栈(调试模式)也会包含符号信息。
现在也可以使用命令行参数 -Xstatic-framework
或者以下 Gradle 脚本来构建静态库:
需要注意的一点,现阶段官方表示拉取和编译这些依赖仍然需要一个 Xcode 工程。
Kotlin/Native IDE 支持
接下来我们同步下我们的 IDE 对 Kotlin/Native 的支持工作的进展。
除 IntelliJ IDEA 之外,我们也将发布 Kotlin/Native 插件支持 CLion 2019.1、AppCode 2019.1。C interop 描述文件 (.def
) 后续也会得到所有 IDE 的支持,尽管目前代码补全功能还没有上线。
对于 CLion and AppCode, 我们也支持了异常堆栈跳转源码的支持。
IntelliJ IDEA 支持
调试功能的提升
当你在调试协程代码时,你可以看到有一个单独的异步堆栈 “Async stack trace” 显示挂起时的变量。
当程序在 suspend 函数或者 Lambda(例子的第 13行)中的断点停止时, “Async stack trace” 显示了变量在上一次挂起时的状态(12行)。你可以浏览 suspend 函数在当前协程中从上一个挂起点的全部的堆栈 (第12、4行)并确认变量的值:
这会帮助你更方便的理解当前协程的运行状态。
在调试 Kotlin 代码时,可以选择 “Kotlin” 模式来查看变量。
Eclipse IDE 插件更新
Eclipse 插件 0.8.14 主要包含以下更新:Kotlin 1.3.30 编译器支持, 大量的问题修复和整体稳定性的提升。该版本也增加了对 Gradle 工程的实验性质的支持。你可以用 Eclipse Buildship 导入工程,你会发现 Kotlin 会被正常配置。
指定 JVM 版本
如果你的程序运行在 JVM 9, 10, 11, 或者 12 等版本下,你可以设置 jvmTarget
到对应的版本了。这个设置会影响编译的 class 文件的字节码版本,但它们不是后向兼容的。相比之下,新目标版本不会有任何字节码优化也不会有任何新特性,期待后续Kotlin继续更新。
写在最后
无论 Google 对Kotlin 赋予什么期望,总而言之,Google提出新的系统和跨平台方案,意味着Android 生态已经向不同领域发力,最近微软的反击也预示者,Google的跨端计划已经对微软形成了火力压制,坐等大安卓起飞,移动开发下一春不远了。
于此同时微软也在大力发展自己的.net语言的跨平台,并且也在支持 Pyhon开发语言的各种工具,其实是在对 Flutter和Kotlin 提出了挑战。
大家如何看待 Kotlin 的未来? 欢迎交流
说句题外话,有不少人想加鱼哥微信,鱼哥姑且放出来,但是坑位有限哦。
推荐阅读
无人驾驶会让你失去“方向盘”吗?
互联网职场红利真的不多了
刷了一个半月算法题,我薪资终于Double了
你的 APP 为何启动那么慢?
喜欢就点个在看吧
Kotlin 新版来了,支持跨平台!相关推荐
- 新版Microsoft Edge支持跨平台跨设备浏览
之前一直使用Google Chrome浏览器,可以随意安装插件扩展程序,无广告,这是我钟爱她的原因.但是之后不能登录Google账号,不能实现跨设备应用,就想找一款好用的替代品,近期发现了新版的Mic ...
- OGEngine基于java支持跨平台的手游开发开源引擎
OGEngine是国际著名开源引擎AndEngine的一个分支,遵循LGPL开源协议使用OpenGL ES进行图形绘制.同时集成了Box2D物理引擎,因此可以实现复杂的物理效果. OGEngine主要 ...
- 为什么说java语言是支持跨平台的
1.反问:为什么c语言不支持跨平台. c语言不支持跨平台原因:编译时候,需要指定机器cpu,即平台, 所以为什么说C语言不能实现跨平台运行,就是因为它编译出来的 输出文件的格式,只适用于某种cpu,其 ...
- Gox语言——支持跨平台原生GUI开发的轻量级全功能脚本语言 - GX1
Gox语言是以Go语言(Golang)为基础的解释型/脚本语言,它除了具有一般脚本语言所具有的编写快捷.语言简洁.易于理解等特点外,还支持其他语言所不具备的跨平台原生图形界面(GUI)开发,并且代码写 ...
- 【.NET6+Avalonia】开发支持跨平台的仿WPF应用程序以及基于ubuntu系统的演示
前言:随着跨平台越来越流行,.net core支持跨平台至今也有好几年的光景了.但是目前基于.net的跨平台,大多数还是在使用B/S架构的跨平台上:至于C/S架构,大部分人可能会选择QT进行开发,或者 ...
- 基于前端Vue后端.NetCore Web后台管理系统通用开本框架采用前后端分离技术,前端使用vue2.6.0,后端使用.netcore3.1,支持跨平台、多租户
基于前端Vue后端.NetCore Web后台管理系统通用开本框架采用前后端分离技术,前端使用vue2.6.0,后端使用.netcore3.1,支持跨平台.多租户.支持MySQL/SQLServer/ ...
- 工业互联网WMS系统,前端基于Vue,后端基于NetCore,前后端分离,支持跨平台、支持多租户
工业互联网WMS系统. 前端基于Vue2.6,后端基于.NetCore3.1,前后端分离,支持跨平台.支持多租户.多组织,多语言.多数据库. 业务包括基础数据.物料管理.仓库管理.配置管理.库存管理等 ...
- 免费分享-【APP分发系统仿fir.im】新版APP应用分发新版源码支持分发托管运营版源码
[APP分发系统仿fir.im]新版APP应用分发新版源码支持分发托管运营版源码 修复远程被恶意删数据库,支持封装仿fir.im分发APP应用分发托管平台经营版源码,一键访问域名直接安装. 纠正iOS ...
- access ea 可以联网吗_《极品飞车:热度》现已支持跨平台联机 6月16日加入EA Access...
原标题:<极品飞车:热度>现已支持跨平台联机 6月16日加入EA Access 大家好,我是 Matt Webster,Criterion Games 的总经理.首先,我想让大家知道我们在 ...
- PySide是Python语言的Qt框架的一个绑定。PySide支持跨平台和本地GUI应用程序开发,是在Python 2.6、2.7和3.x版本下可用。
PySide是Python语言的Qt框架的一个绑定.PySide支持跨平台和本地GUI应用程序开发,是在Python 2.6.2.7和3.x版本下可用. 在开始使用PySide之前,需要在你的机器上安 ...
最新文章
- UIButton 的不同设置和UITextField 的默认值(修改默认值)
- HDU1506 Largest Rectangle in a Histogram(算竞进阶习题)
- python 命令行参数处理 getopt模块详解
- 解决springboot不扫描@repository的问题
- 打造一个实用的Ubuntu Linux
- 码龄超过20年,依然对生活和编程充满激情,这是三位70后“老”程序员的故事
- 牛客多校6 - Binary Vector(组合数学+推公式)
- 产品小白的知识点1——用户周期
- win10安装masm32 SDK并运行一个小程序
- HLS视频点播直播初探
- 2018年python工作好找吗-2018年最新数据:python、大数据、人工智能从业者薪资表...
- [转载]shell 十三问?
- BeanUtils与PropertyUtils的常用方法
- 噪音达到多少分贝就算是扰民
- 织梦dedecms橙色响应式月嫂保姆家政服务公司网站模板
- Process finished with exit code 135 (interrupted by signal 7: SIGEMT)
- 中文编码标准GB2312, GB18030的下载地址
- ubuntu安装shutter
- RT-Thread物联网操作系统介绍:6、线程挂起和恢复
- 2022年现场综合化维护工程师四级认证考试题目
热门文章
- C#:$符号和@符号的用法介绍
- linux soc 程序崩溃,SOC、FLCK和内存之间的关系,以3900X+X570为例(更新PCIE4.0)
- 封装一个FTPClient连接池工具类
- 【一天一个C++小知识】008.内联函数
- Web Service工作原理及实例
- java resultSet获取总行数
- 三、VueJs 填坑日记之项目文件认识
- 网络工程师应该掌握的知识要点 (共45个)
- 使用cxf框架搭建webservice
- onclick控制元素显示与隐藏时,点击第一次无反应的原因