Kotlin 1.4 版本正式发布:新功能一覽
2020年 8 月 17 日,Kotlin 1.4 版本正式发布。此次的版本更新花费了很多精力来提高 Kotlin 及其工具的性能和质量,例如高亮显示的速度提高了 1.5-4 倍,支持多种新的语言功能,例如 Kotlin 接口 SAM 转换。
在过去的一年中,超过 580 万开发者都曾使用过 Kotlin 编码,这个数据比上一年增加了 1.5 倍,而且还在增长。Kotlin 社区在全球拥有超过 200 个用户小组,在 2020 StackOverflow 开发者调查中,Kotlin 是最受开发者欢迎编程语言的第 13 位。
很多公司也选择将 Kotlin 作为首选语言,目前比较出名的使用 Kotlin 开发的软件包括:
服务器端:Atlassian、 Adobe、 ING Bank;Android:Google Home、 Duolingo、 Zomato;
多平台移动端:VMware、 PlanGrid 和 CashApp、Mirego Trikot;
Web:JetBrains Space、 Karhoo、 MIPT 核物理方法实验室 VisionForge。
新的编译器
新编译器实现的目标是变得更快速、统一 Kotlin 支持的所有平台,并提供用于编译器扩展的 API。这将是一项多年的工作,不过开发团队已开始好一阵子了,因此新实现的某些部分将在 1.4 中发布,可让这个过程变得更加平顺。
有些功能也已经发布了; 例如,如果您尝试了用于类型推理的新算法,它是新编译器的一部分。其他部分的处理方法相同。也就是说,两种版本都将在一段时间内可用,旧版本和新版本都将处于实验模式; 当新的稳定后,它将成为默认版本。
新的前端(front-end)加速
开发团队期望新编译器提高的速度将来自新的前端实现。
为了提供一些背景信息,可以将编译想成吸收源文件并将其逐步转换为可执行代码的管道。此管道的第一步俗称为编译器的前端。它解析代码和命名、执行类型检查等。此编译器的这一部分也可以在 IDE 中使用,来高亮显示语法错误、导航到定义并搜索项目中的符号用法。这是 kotlinc 如今花费最多时间的步骤,因此开发团队希望使其更快。
当前的实现尚未完成,并且不会在 1.4 中到来。但是,大多耗时的工作都是由它完成,因此我们可以预期提速的效果。基准测试(编译 YouTrack 和 Kotlin 编译器本身)表明,新前端的速度约为现有前端快 4.5 倍。
统一的后端和可扩展性
在前端完成对代码的分析之后,后端将生成可执行文件。目前有三个后端:Kotlin / JVM,Kotlin / JS 和 Kotlin / Native。前两个以往是独立编写的,没有代码共享。当我们启动 Kotlin / Native 时,它是基于围绕 Kotlin 代码内部表示(internal representation)构建的新基础架构的,该功能具有与虚拟机中的字节码类似的功能。
现在,开发团队计划将其他两个后端迁移到同一内部表示。因此,他们将共享许多后端逻辑并拥有统一的管道,以允许对所有目标仅执行一次大多数功能、优化和错误修复。
虽然正逐步迁移到新的后端,可是在 1.4 中,默认情况下不太可能启用它们,但用户将能够选择明确使用它们。
通用的后端基础结构为跨平台编译器扩展打开了大门。可以在这管道中添加一些自定义处理和/或转换,这些处理和转换将自动适用于所有目标。在 1.4 中将不提供用于此类扩展的公开 API(该 API 稍后将被稳定),但开发团队正在与合作伙伴 (其中包括已经构建其编译器插件的 JetPack Compose )紧密合作。
Kotlin 1.4 新功能
Kotlin 1.4 将提供一些新功能。
Kotlin1.4会在2020年发布。其中除了很多跨平台能力的补强之外,也有不少语法层面的改进,可能会对广大开发者带来更直接的影响
Kotlin支持SAM转换
SAM的意思是Singel Abstract Method,我们将只有单一方法的接口/抽象类成为SamType。Kotlin目前(最新1.3.6)仅能支持Java中的SAM转换
//java
public interface OnClickListener {void onClick(View v);
}
public class View {public void setOnClickListener(@Nullable OnClickListener l) {mOnClickListener = l}
}
//kt
view.setOnClickListener( object : OnClickListener {override fun onClick(v: View) {...}
})
// SAM转换
view.setOnClickListener {...
}
Kotlin通过SAM转换可以将Java中对SamType的调用,转换为一个对Lambda的调用,减少大量的模板代码,但是同样SamType如果定义在Kotlin中,是无法转换的:
interface Action {fun run()
}
fun runAction(a: Action) = a.run()fun main() {runAction {// error :Type mismatch. // Required: Action// Found: () → Unit ...}
}
但是在1.4之后,可以通过为interface添加fun关键字, 声明为SamType,
fun interface Action {fun run()
}fun main() {runAction {println("Hello, KotlinConf!")}
}
即使在1.4之前,我们也有一些SAM转换的替代方案,详细可以参考这篇文 https://blog.csdn.net/vitaviva/article/details/104055623
混用命名参数和位置参数
Kotlin进行方法调用时可以通过参数名指定参数,也可以不指定,按照声明的顺序传参
fun f(a: Int, b: Int, c: Int) {}fun main() {f(1, 2, 3) //位置传参:按序传参f(a = 1, c = 3, b = 2) //命名传参:按参数名传参
}
但是不允许混合两种
fun main() {f(1, b = 2, 3) // Mixing named and positioned arguments is not allowed
}
1.4之后允许上面这种传参方式,这样参数过多的调用时可以提高代码可读性。
尾后逗号
当函数的参数比较多时,为了可读性,我们习惯换行书写:
fun f(a: Int,b: Int,c: Int, //error: Expecting an argument
) data class Item(val a: Int,val b: Int,val c: Int, //error: Expecting an argument
)
此时,如果需要增加参数或者交换位置时,总要额外删除最后一个参数尾部的逗号,1.4之后允许尾后逗号的存在,方便修改。
属性代理优化
我们自定义属性代理时,为了能够在调用getValue/setValue时获取KProperty,Kotlin在编译期会生成一个$$delegatedProperties数组,用来存储所有可能用到KProperty
//定义代理
class Delegate {lateinit var real : Stringoperator fun getValue(thisRef: Any?, property: KProperty<*>): String {return real}operator fun setValue(thisRef: Any?, property: KProperty<*>, value: String) {println("${property.name}: $value")real = value}//使用代理
class MyClass {var s by Delegat {"hello"}s = "hello kotlin"
}
反编译java后会发现多了$$delegatedProperties
public final class MyClass {static final kotlin.reflect.KProperty[] $$delegatedProperties; //存储KProperty...KProperty var2 = $$delegatedProperties[0];s.setValue((Object)null, var2, "hello kotlin");
}
但很多时候我们不使用KProperty,此时没有必要生成
delegatedProperties。Kotlin1.4优化了这种case,如果我们在operator前加inline,且使用KProperty的话,就不回再生成
delegatedProperties。例如 未来1.4中lazy的代理定义如下
//定义
inline operator fun <T> Lazy<T>.getValue(thisRef: Any?, property: KProperty<*>): T = value
反编译的Java将不会再生成$$delegatedProperties。
參考資料
https://kotlinlang.org/
https://blog.jetbrains.com/kotlin/2020/08/kotlin-1-4-released-with-a-focus-on-quality-and-performance/
https://kotlinlang.org/docs/tutorials/getting-started.html
Kotlin开发者社区
专注分享 Java、 Kotlin、Spring/Spring Boot、MySQL、redis、neo4j、NoSQL、Android、JavaScript、React、Node、函数式编程、编程思想、"高可用,高性能,高实时"大型分布式系统架构设计主题。
High availability, high performance, high real-time large-scale distributed system architecture design。
分布式框架:Zookeeper、分布式中间件框架等
分布式存储:GridFS、FastDFS、TFS、MemCache、redis等
分布式数据库:Cobar、tddl、Amoeba、Mycat
云计算、大数据、AI算法
虚拟化、云原生技术
分布式计算框架:MapReduce、Hadoop、Storm、Flink等
分布式通信机制:Dubbo、RPC调用、共享远程数据、消息队列等
消息队列MQ:Kafka、MetaQ,RocketMQ
怎样打造高可用系统:基于硬件、软件中间件、系统架构等一些典型方案的实现:HAProxy、基于Corosync+Pacemaker的高可用集群套件中间件系统
Mycat架构分布式演进
大数据Join背后的难题:数据、网络、内存和计算能力的矛盾和调和
Java分布式系统中的高性能难题:AIO,NIO,Netty还是自己开发框架?
高性能事件派发机制:线程池模型、Disruptor模型等等。。。
合抱之木,生于毫末;九层之台,起于垒土;千里之行,始于足下。不积跬步,无以至千里;不积小流,无以成江河。
Kotlin 简介
Kotlin是一门非研究性的语言,它是一门非常务实的工业级编程语言,它的使命就是帮助程序员们解决实际工程实践中的问题。使用Kotlin 让 Java程序员们的生活变得更好,Java中的那些空指针错误,浪费时间的冗长的样板代码,啰嗦的语法限制等等,在Kotlin中统统消失。Kotlin 简单务实,语法简洁而强大,安全且表达力强,极富生产力。
Java诞生于1995年,至今已有23年历史。当前最新版本是 Java 9。在 JVM 生态不断发展繁荣的过程中,也诞生了Scala、Groovy、Clojure 等兄弟语言。
Kotlin 也正是 JVM 家族中的优秀一员。Kotlin是一种现代语言(版本1.0于2016年2月发布)。它最初的目的是像Scala那样,优化Java语言的缺陷,提供更加简单实用的编程语言特性,并且解决了性能上的问题,比如编译时间。 JetBrains在这些方面做得非常出色。
Kotlin语言的特性
用 Java 开发多年以后,能够尝试一些新的东西真是太棒了。如果您是 Java 开发人员,使用 Kotlin 将会非常自然流畅。如果你是一个Swift开发者,你将会感到似曾相识,比如可空性(Nullability)。 Kotlin语言的特性有:
1.简洁
大幅减少样板代码量。
2.与Java的100%互操作性
Kotlin可以直接与Java类交互,反之亦然。这个特性使得我们可以直接重用我们的代码库,并将其迁移到 Kotlin中。由于Java的互操作性几乎无处不在。我们可以直接访问平台API以及现有的代码库,同时仍然享受和使用 Kotlin 的所有强大的现代语言功能。
3.扩展函数
Kotlin 类似于 C# 和 Gosu, 它提供了为现有类提供新功能扩展的能力,而不必从该类继承或使用任何类型的设计模式 (如装饰器模式)。
4.函数式编程
Kotlin 语言一等支持函数式编程,就像Scala一样。具备高阶函数、Lambda 表达式等函数式基本特性。
5.默认和命名参数
在Kotlin中,您可以为函数中的参数设置一个默认值,并给每个参数一个名称。这有助于编写易读的代码。
6.强大的开发工具支持
而由于是JetBrains出品,我们拥有很棒的IDE支持。虽然Java到Kotlin的自动转换并不是100% OK 的,但它确实是一个非常好的工具。使用 IDEA 的工具转换Java代码为 Kotlin 代码时,可以轻松地重用60%-70%的结果代码,而且修改成本很小。
Kotlin 除了简洁强大的语法特性外,还有实用性非常强的API以及围绕它构建的生态系统。例如:集合类 API、IO 扩展类、反射API 等。同时 Kotlin 社区也提供了丰富的文档和大量的学习资料,还有在线REPL。
A modern programming language that makes developers happier. Open source forever
https://kotlinlang.org/
http://www.taodudu.cc/news/show-2355952.html
相关文章:
- 怎样写好一篇高质量的技术文章?
- 一切皆是文件:UNIX,Linux 操作系統的設計哲學
- UML类图详细介绍
- 川土微电子 | CA-IS3050U隔离式CAN收发器
- 土木学matlab还是python_五行属土的字大全
- 合抱之木,生于毫末。九层之台,起于累土。千里之行,始于足下
- UML - 类图的关系总结
- JAVA基础之异常
- 九尺之台,始于垒土
- Android 设计素材积累(九层之台起于垒土)
- 初识Python必看基础知识~ 续(6)九层之台,起于垒土,肝肝肝~
- 九层之台,起于垒土
- 文学de垒土
- 九层之台,始于垒土;合抱之木,始于毫末;千里之行,始于足下!
- 合抱之木,生于毫末; 九层之台,起于垒土。
- Android APP安全测试
- 【电子商务法】北邮国际学院大三上期末复习
- 大数据架构和模式
- 2020上半年DeFi行业研究报告-Part2 发行 | TokenInsight
- 独家研究 I 某新一线城市中高端养老社区项目(CCRC)入住客户画像深度洞察研究报告
- Java基础:第5-6章(重点)
- 刑事实务办案中疑难问题
- 正确认识P2P,从容面对风暴
- 当前网络安全风险及举例
- 互联网金融学习总结(1)——互联网金融(ITFIN)概念相关学习
- Chainlink的77种用法
- 合同法律风险管理 被骗者刑事风险
- 8 种流行的计算机视觉应用
- 如何区分P2P是互联网创新还是非法集资?最高检回应
- 肖飒:区块链应用创业的法律边界及案例分析 | 清华x-lab公开课
Kotlin 1.4 版本正式发布:新功能一覽相关推荐
- win10 linux 1903,win10最新版本1903新功能
在微软再一次推出了新版本win101903之后,小伙伴们一定很想知道这次更新微软又推出了什么新功能吧.据小编所知,此次更新除了修复了之前版本出现在bug和功能缺陷之外,还新增了内置应用可以卸载.亚克力 ...
- FLStudio21中文版本全部新功能讲解
万众期待的FL Studio 21版本将于正式发布上线,目前在紧锣密鼓的安排上线中,届时所有购买正版 FL Studio 的用户,都可以免费升级到21版!按照惯例,本次新版也会增加全新插件,来帮助大家 ...
- PHP5各个版本的新功能和新特性总结(转载 http://www.jb51.net/article/48150.htm)
本文目录: PHP5.2 以前:autoload, PDO 和 MySQLi, 类型约束 PHP5.2:JSON 支持 PHP5.3:弃用的功能,匿名函数,新增魔术方法,命名空间,后期静态绑定,Her ...
- Win11正式发布新功能
2014年,微软发布了win10系统,后来微软号称win10将是最后一版系统,以后不会再有win11什么的玩意儿,但是,今年微软还是发布了win11. 科技界的大佬说话,永远不要相信,小米还说自己不会 ...
- mac securecrt程序无响应_Adobe庆祝Photoshop问世30周年 为Mac和iPad版本提供新功能
Adobe今天庆祝Photoshop诞生30周年,之前它已经在Mac和iPad上对该应用程序进行了多次更新.Mac上的一项重要新功能是支持MacOS Mojave和更高版本上的黑暗模式.Photosh ...
- MIUI12查看Android版本,MIUI12新功能与支持机型一览 开发版内测申请教程
4月27日下午的小米10青春版发布会上,小米首先带来了全新的MIUI12,新的系统对Android进行了全方位的优化,和上一版MIUI11相比,在UI设计和细节功能等各个方面都有了明显的提升.根据发布 ...
- 计算机uc,解密UC浏览器计算机版本的新功能
解密UC浏览器红色杏子工具 计算机版本的UC浏览器随附一个相对易于使用的工具-Hongxing XX,它可以帮助您突破某些人为限制的网络环境(例如防火墙阻止企业中的网站). 此工具用于阻止用户网络环境 ...
- Kotlin 一个好用的新功能:Parcelize
在开发中,如果有需要用到序列化和反序列化的操作,就会用到 Serializable 或者 Parcelable,它们各有优缺点,会适用于不同的场景. Serializable 的优点是实现简单,你只需 ...
- VS 2019 16.11正式发布 | 新功能(Hot Reload 热重载)试用
VS 2019 16.11 VS 2019 16.11已于2021.8.10正式发布.(https://devblogs.microsoft.com/visualstudio/visual-studi ...
- ONLYOFFICE文档v7.3版本携新功能发布了!
ONLYOFFICE 文档 v7.3 现已发布:新增字段填写接收人角色.SmartArt.全新安全性设置.查看窗口等功能 在我们最新版本的在线编辑器中现已提供高级表单.SmartArt图形插入.增强密 ...
最新文章
- 数据竞赛Tricks集锦
- Linux系统检测命令有哪些
- mysql排列组合实现_Java实现数列的排列组合
- 《JavaScript高级程序设计》阅读笔记(一):ECMAScript基础
- 男子网购二手苹果手表 竟收到这些东西 怒斥卖家:你这个骗子!
- 计算机系统建模与仿真论文,计算机模拟 仿真论文.doc
- Emberjs学习之路(一)
- LOJ#2764. 「JOI 2013 Final」JOIOI 塔
- 初识验收测试管理工具FitNesse
- C++中使用sort函数给数组排序
- 110kV终端变电站电气部分设计
- OpenCV4图像处理算子不完全手册-入门篇(已完结)
- 【3款文献阅读的插件】
- python基本写法_python操作文件常用写法
- 读书笔记:《明朝那些事第三部:妖孽宫廷》
- 【用户角色权限设计】
- SSH框架报 org.hibernate.impl.QueryImpl cannot be cast to com.gao.ruan.pojos.Category
- 樱道,空蝉,雨空,夏恋,雨道,彩月,幻昼,惊梦,白夜。这些纯音乐
- m4a怎么转换成mp3,4招搞定
- 一文读懂Apache Kylin