您好,欢迎来到12图资源库!分享精神,快乐你我!我们只是素材的搬运工!!
  • 首 页
  • 当前位置:首页 > 开发 > WEB开发 >
    Kotlin 1.4 和未来值得等候的中央
    时间:2020-03-06 08:13 来源:网络整理 作者:网络 浏览:收藏 挑错 推荐 打印

    Kotlin 1.4 和未来值得等候的中央

    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 关键字标记一个接口,以强调它可以用作功用性接口:

    fun interface Action { 

        fun run () 

      

    fun runAction (a: Action) = a.run () 

      

    fun main () { 

        runAction { 

            println ("Hello, KotlinConf!"

        } 

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

    混合命名和位置参数

    Kotlin 制止将带有显式称号的参数(“命名”)和不带称号的常规参数(“位置”)混合运用,除非仅将命名参数放在一切位置参数之后。但是,在一种状况下,这确实很烦人:当一切参数都保持在正确的位置而您想为中间的一个参数指定称号时。Kotlin 1.4 将处置此成绩,因此将可以编写如下代码:

    fun f (a: Int, b: Int, c: Int) {} 

      

    fun main () { 

        f (1, b = 23

    优化的委托属性

    开发团队将改良 lazy 属性和其他一些委托属性的编译方式。

    通常,委托属性可以拜访相应的 KProperty 反射对象。例如,当运用 Delegates.observable 时,可以显示有关已修正属性的信息:

    import kotlin.properties.Delegates 

      

    class MyClass { 

        var myProp: String by Delegates.observable ("<no name>") { 

            kProperty, oldValue, newValue -> 

            println ("${kProperty.name}: $oldValue -> $newValue"

        } 

      

    fun main () { 

        val user = MyClass () 

        user.myProp = "first" 

        user.myProp = "second" 

    为了使之成为能够,Kotlin 编译器会生成一个附加的语法成员属性,即一个存储一切 KProperty 对象的数组,这些对象表示在类外部运用的委托属性:

    >>> javap MyClass 

      

    public final class MyClass { 

        static final kotlin.reflect.KProperty[] $$delegatedProperties; 

        ... 

    (责任编辑:admin)