|
|
51CTO旗下网站
|
|
移步端
  • Kotlin 1.4 和前途值得期待的中央

    Kotlin 1.4 名将于 2020 年春季生产,他支付集团在博客介绍了她们对 Kotlin 的愿景:“让 Kotlin 成为您所有工作之保险伴侣,并是您执行任务的默认语言选择。

    笔者:刘少奇 来源:开源中国| 2020-01-15 12:40

     

    Kotlin 1.4 名将于 2020 年春季生产,他支付集团在博客介绍了她们对 Kotlin 的愿景:“让 Kotlin 成为您所有工作之保险伴侣,并是您执行任务的默认语言选择。”故此,付出集团将会让开发者在一切平台上都能利用 Kotlin。

    据开发集团的介绍,Kotlin 1.4 名将强调于质量和总体性。因为对今天的 Kotlin 来说,增长整体体验比添加新功能更加重大。另外,因为构建速度通常是我家最关注的题材,故此开发集团正在不断改善工具链以消灭此问题。但是逐步改进跟不上生产代码库的风流增长:尽管开发集团加快了编译速度,但用户编写了更多的编码,使总体构建时间还缺乏短。故此,付出集团计划重新实现编译器以使他更便捷。

    新的编译器

    新编译器实现的对象是变得更便捷、联合 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 类的 SAM 转移

    镇区已要求开发集团引入对 Kotlin 类( KT-7770 )的 SAM 转移的支持。如果仅将一个抽象方法的接口或类预计作为参数,则将 lambda 表现参数传递时,名将采用 SAM 转移。下一场,玉器自动将 lambda 转移为兑现抽象成员函数的类的范例。

    SAM 转移当前仅适用于 Java 接口和抽象类。该计划背后的前期想法是针对此类用例明确使用函数类型。然而,真相证明,函数类型和档次别名并未能涵盖所有用例,开发者常常不得不仅在 Java 官方保留接口才能对他进行 SAM 转移。

    与 Java 不同,Kotlin 不同意利用一种浮泛方法对每个接口进行 SAM 转移。付出集团认为,使接口适用于 SAM 转移的企图应该明确。故此,要定义 SAM 接口,开发者需要采取 fun 关键字标记一个接口,以强调它可以用作功能性接口:

          
    1. fun interface Action { 
    2.     fun run () 
    3.   
    4. fun runAction (a: Action) = a.run () 
    5.   
    6. fun main () { 
    7.     runAction { 
    8.         println ("Hello, KotlinConf!"
    9.     } 

    请注意,仅在新的类型推断算法中支持传递 lambda 而不是 fun 接口

    混合命名和职务参数

    Kotlin 取缔将带有显式名称的底数(“命名”)和不带名称的正常化参数(“位置”)混合使用,除非仅将命名参数放在所有位置参数之后。但是,在一种情况下,这无疑很烦人:顶全体参数都保持在不利的岗位而您想为对方间的一个指数指定名称时。Kotlin 1.4 名将解决此问题,因此将能够编写如下代码:

          
    1. fun f (a: Int, b: Int, c: Int) {} 
    2.   
    3. fun main () { 
    4.     f (1, b = 23

    多极化的嘱托属性

    付出集团将改善 lazy 属性和任何组成部分委托属性的编译方式。

    普通,委托属性可以访问相应的 KProperty 反射对象。例如,顶使用 Delegates.observable 时,可以表现有关已修改属性的消息:

          
    1. import kotlin.properties.Delegates 
    2.   
    3. class MyClass { 
    4.     var myProp: String by Delegates.observable ("<no name>") { 
    5.         kProperty, oldValue, newValue -> 
    6.         println ("${kProperty.name}: $oldValue -> $newValue"
    7.     } 
    8.   
    9. fun main () { 
    10.     val user = MyClass () 
    11.     user.myProp = "first" 
    12.     user.myProp = "second" 

    为了使之变成可能,Kotlin 玉器会生成一个附加的语法成员属性,即一个存储所有 KProperty 目标的数组,该署目标表示在类内部使用的嘱托属性:

          
    1. >>> javap MyClass 
    2.   
    3. public final class MyClass { 
    4.     static final kotlin.reflect.KProperty[] $$delegatedProperties; 
    5.     ... 

    但是,少数委托属性不会以任何方法使用 KProperty。对于他们来说,在 $$delegatedProperties 官方生成对象是次优的。Kotlin 1.4 本子将优化这种情景。如果委托属性运算符是 inline,并且未采取 KProperty 数,则不会扭转相应的辐射对象。最精美之示范是 lazy 属性。lazy 属性的 getValue 贯彻是 inline,并且不采取 KProperty 数:

          
    1. inline operator fun <T> Lazy<T>.getValue (thisRef: Any?, property: KProperty<*>): T = value 

    副 Kotlin 1.4 起来,顶定义 lazy属性时,名将不会扭转相应的 KProperty老。如果在类中采用的专门委托属性是 lazy属性(以及符合此优化的任何属性),则不会为类生成整个 $$delegatedProperties 数组:

          
    1. class MyOtherClass { 
    2.     val lazyProp by lazy { 42 } 
    3.  
    4. >>> javap MyOtherClass 
    5. public final class MyOtherClass { 
    6.     // no longer generated: 
    7.     static final kotlin.reflect.KProperty[] $$delegatedProperties;  
    8.     ... 

    紧跟着逗号

    可以在数列表中的最后一个指数之后放置一个附加的尾随逗号,下一场交换行或补新参数,而不要添加或删除丢失的句号。

    【编纂推荐】

    1. TIOBE 1 月榜单:C 拥有“2019 寒暑编程语言”名称
    2. 这5个Python特色,后悔没早知道
    3. 腾讯大佬告诉你,写Python到底用什么IDE正好
    4. 近代编程语言哪家强?2020年,你或许应该了解这7门编程语言
    5. 快来看望,你正在采取的编程语言流行排行榜!别把时代淘汰了_IT艺术周刊第610为期
    【义务编辑: 张燕妮 TEL:(010)68476606】

    点赞 0
  • 编程语言  Python  Kotlin
  • 分享:
    大家都在看
    猜你喜欢
  • 24H热文
    一周话题
    每月获赞
  • 菜鸟码农成神之路:必发娱乐手机版精选好文,都在此间了入职阿里5年,她如何破解“艺术债”?Mozilla 通告 MDN Web 付出人员要求评估报告“跳槽”还是“卧槽”,你想好了吗?阿里资深Leader:组建技术团队的组成部分思考北京大学博士一作,165页论文破解困扰爱因斯坦之“量子纠缠”!性能提升最高120倍!滴滴实习生提出自动结构化减枝压缩算法框架欧委会这几个小技巧,能让你的书法速度比别人快2倍
  • 菜鸟码农成神之路:必发娱乐手机版精选好文,都在此间了Mozilla 通告 MDN Web 付出人员要求评估报告阿里资深Leader:组建技术团队的组成部分思考七种可能改变IT的“疯狂”艺术Linux 的 18 个装 B 命令,记得全部搂一遍!近代编程语言哪家强?2020年,你或许应该了解这7门编程语言12306监控中心画面首曝:港股就是这样秒光的又出Bug?30买空调?一下子把买空...
  • 2020工钱翻倍,全靠12月的这十篇热门文章!一战赚了1090京,恐怖之张一鸣!Windows 11系统操作界面曝光一次迁移引发的“血案”,末了赔偿29京!菜鸟码农成神之路:必发娱乐手机版精选好文,都在此间了北京大学天才王垠受邀面试阿里P9把毙后手撕P10面试官赵海平!Mozilla 通告 MDN Web 付出人员要求评估报告爬了7W条视频评论,李子柒凭什么火遍大地?
  • 订阅专栏+更多

    Python使用场景实战手册

    Python使用场景实战手册

    Python使用场景实战手册
    共3章 | KaliArch

    116人口订阅学习

    一步到位玩儿透Ansible

    一步到位玩儿透Ansible

    Ansible
    共17章 | 骏马金龙1

    184人口订阅学习

    云架构师修炼手册

    云架构师修炼手册

    云架构师之必不可少技能
    共3章 | Allen在路上

    131人口订阅学习

    读 书 +更多

    异常网管――网络应用

    在网络应用越来越复杂的当日,风的网络应用已经不能满足企业和用户之要求,这就对网络管理员、信息管理部门提出了更高的要求。资本书介绍了...

    订阅51CTO邮刊

    点击这里查看样刊

    订阅51CTO邮刊

    51CTO劳务号

    51CTO官微