【转】Kotlin 新版来了,支持跨平台!

作者:Tamic
原文链接:juejin.im/post/5cd8f9…

谷歌在今年的 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: 这个版本也对它做了优化。另一个是 1.3.20 引入的,开启 Compile Avoidance,就是说依赖如果只有方法体发生变化,那么就跳过注解处理。只有在所有的注解处理器都显式的在注解处理的 classpath 声明的情况下,Compile Avoidance 才会生效。

无符号数组的扩展方法

从 1.3 开始我们可以在开发模式下使用无符号数值类型。这个版本我们对无符号类型以及其数组做了更多的支持: 需要注意的是,我们之前就可以在无符号数组上使用函数式操作例如 filter 和 map ,这是因为无符号类型的数组实际上是实现了 Collection 接口的,例如 UIntArray 实现了 Collection 接口。 不过这样就涉及到了性能问题,因为在 UIntArray 被当作 Collection的实例使用时会额外 创建 一个对象出来。现在好了,所有新增的扩展函数都使用无符号数组类型作为 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提出新的系统和跨平台方案,意味着Andorid 生态已经向不同领域发力,最近微软的反击也预示者,google的跨端计划已经对微软形成了火力压制,坐等大安卓起飞,移动开发下一春不远了。 于此同时微软也在大力发展自己的.net语言的跨平台,并且也在支持 Pyhon开发语言的各种工具,其实是在对 Flutter和Kotlin 提出了挑战。 大家如何看待 Kotlin 的未来? 欢迎交流

扫一扫 关注我的公众号【辉辉代码路】

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/536466.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

WebSocket轻松单台服务器5w并发jmeter实测

测试结论 nginx最多只能维持(65535*后端服务器IP个数)条websocket的长连接,如果后端websocket服务器IP只有一个,那么就只能最多支持65535条连接。瓶颈就产生在了nginx上建议采用LVS的DR模式来做负载均衡,这样最大长连接数目就只和websocket服…

人工智能的历史

AI(Artificial Intelligence)即人工智能,最初是在1956 年被提出,人工智能研究如何用计算机去模拟、延伸和扩展人的智能;如何把计算机用得更聪明;如何设计和建造具有高智能水平的计算机应用系统;如何设计和制造更聪明的…

nginx配置 vue打包后的项目 解决刷新页面404问题|nginx配置多端访问

访问vue页面时,/# 使url看着不美观,使用 H5 history模式可以完美解决这个问题,但需要后端nginx帮助。接下来我们自己配置一下。 使用前端路由,但切换新路由时,想要滚动到页面顶部,或者保持原先的滚动位置&a…

算法导论2nd 10.1-7

为什么80%的码农都做不了架构师?>>> 思路:两个队列q1和q2,两个队列指针pusher和poper分别指向q1和q2,push时调用pusher->enqueue,然后将poper里的元素全部dequeue并enqueue到pusher,最后交换…

阿里云Windows2012 R2服务器IPV6配置记录

要上苹果APP,则必须要支持IPV6和HTTPS,阿里云本身没有开放IPV6地址。因此需要进行IPV6的相关配置。查了很多IPV6的配置资料,最终选择用HE进行IPV6设置。在这过程中遇到一些问题,以记录下来以备注。 1、IPV6 Tunnel Broker设置 在H…

mycat 1.6.5 for mysql 8分表攻略

2019独角兽企业重金招聘Python工程师标准>>> 简述 mycat 对于 mysql 的支持有版本要求,目前 1.6.5 不支持 mysql 8.0 版本。因为mysql 8.0 的加密方式发生了变化。 mycat 1.6.5 连接 mysql 8.0 的两个方式 mysql 8.0 采用兼容方式,&#xff0…

Funcode-贪吃蛇

自己编写的一个小游戏,本来打算做贪吃蛇,结果不会使蛇的身子随蛇头方向改变而改变就换了种想法,最后变成了这样一个另类的小游戏,“笑哭“,下面是程序的主要代码,如果有兴趣也可以下载完整程序代码资源&…

mac 使用远程连接

https://www.jianshu.com/p/9cc90361f37a转载于:https://www.cnblogs.com/xiangsj/p/10876400.html

systemtap执行过程中报probe timer.profile registration error

probe timer.profile registration error 今天在执行火焰图的过程中,代码报错,probe timer.profile registration error 经过查询、分析可能是在该平台该函数是不安全、不共享的。 将 probe timer.profile { 用该代码替换即可 probe perf.sw.cpu_clock !…

(十三)java版spring cloud+spring boot+redis社交电子商务平台-springboot集成spring cache...

电子商务社交平台源码请加企鹅求求:一零三八七七四六二六。本文介绍如何在springboot中使用默认的spring cache,声明式缓存Spring 定义 CacheManager 和 Cache 接口用来统一不同的缓存技术。例如 JCache、 EhCache、 Hazelcast、 Guava、 Redis 等。在使…

搭建gitlab及部署gitlab-runner

2019独角兽企业重金招聘Python工程师标准>>> 1、搭建gitlab,之前yum安装gitlab,安装后一直报502错误,网上百度试过还是无法使用; 所以这次部署在docker里面;如下命令: docker run --detach --hostname gitlab.forebix.com --publish 4433:443 --publish …

母牛的故事

母牛的故事 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Discuss Problem Description 有一对夫妇买了一头母牛,它从第2年起每年年初生一头小母牛。每头小母牛从第四个年头开始,每年年初也生一头小母牛。请编程实现在第n年的时候…

软件性能测试

通常,衡量一个软件系统性能的常见指标有: 1、响应时间(服务器端响应时间、网络响应时间、客户端响应时间) 那客户感受的响应时间其实是等于客户端服务器端网络响应时间 2、吞吐量 软件系统在每单位时间内能处理多少个事务/请求/单…

王小二切饼

王小二切饼 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Discuss Problem Description 王小二自夸刀工不错&#xff0c;有人放一张大的煎饼在砧板上&#xff0c;问他&#xff1a;“饼不许离开砧板&#xff0c;切n(1<n<100)刀最多能分成多少块&…

SmoothNLP 中文NLP文本处理工具 Python 实战示范

SmoothNLP pythonJavaPython python interfaces for SmoothNLP 的 Python 接口&#xff0c; 支持自动下载底层jar包 &#xff0c;目前支持Python3 Pypi 官方安装 pip3 install smoothnlp 复制代码请注意使用python3安装smoothnlp项目&#xff0c;当前版本 version0.2.4 如果您使…

本地缓存Caffeine

Caffeine 说起Guava Cache&#xff0c;很多人都不会陌生&#xff0c;它是Google Guava工具包中的一个非常方便易用的本地化缓存实现&#xff0c;基于LRU算法实现&#xff0c;支持多种缓存过期策略。由于Guava的大量使用&#xff0c;Guava Cache也得到了大量的应用。但是&#x…

《图解HTTP》核心知识总结

HTTP协议的简介 HTTP是超文本传输协议&#xff0c;用于客户端和服务器端之间的通信&#xff0c;属于TCP/IP中的应用层。 HTTP协议的基础知识 客户端和服务器端 客户端是服务请求方&#xff0c;服务器端是服务提供方。 URI和URL URI:URI是统一资源标识符&#xff1b; URL:是统一…

1042: 筛法求素数

1042: 筛法求素数 Time Limit: 1 Sec Memory Limit: 128 MB Submit: 1387 Solved: 918 [Submit][Status][Web Board] Description 用筛法求之N内的素数。 Input N Output 0&#xff5e;N的素数 Sample Input 100 Sample Output 2 3 5 7 11 13 17 19 23 29 31 37 4…

状态机解析请求行

微信公众号&#xff1a;郑尔多斯关注「郑尔多斯」公众号 &#xff0c;回复「领取资源」&#xff0c;获取IT资源500G干货。升职加薪、当上总经理、出任CEO、迎娶白富美、走上人生巅峰&#xff01;想想还有点小激动关注可了解更多的Nginx知识。任何问题或建议&#xff0c;请公众号…

GO 从零开始的语法学习二

for循环 if条件里不需要括号 err ! nil 判断是否为空 func main(){const filename "abc.txt"contents , err : ioutil.ReadFile(filename); err ! nil{fmt.Println(err)} else{fmt.Printf("%s\n",contents)} } 复制代码if的条件里可以进行赋值if的条件里…