写点什么

Kotlin 2.0 跟随全新的更快、更灵活的 K2 编译器一起发布

  • 2024-06-24
    北京
  • 本文字数:1294 字

    阅读完需:约 4 分钟

Kotlin 2.0 跟随全新的更快、更灵活的 K2 编译器一起发布

JetBrains 发布了 Kotlin 2.0 以及全新的 K2 编译器。虽然该语言本身没有引入新的语法,但 K2 编译器带来了一些优势,包括更快的构建、具有智能强制类型转换的扩展语言功能,以及开箱即用的多平台支持。


该版本引入了 K2 编译器,统一了 Kotlin 支持的所有平台,因为所有编译器后端现在都共享了大量的逻辑和统一的管道。这使我们能够为所有平台一次性地实现大多数特性、优化和缺陷修复,从而大幅提高了新语言特性的开发速度。


K2 目前支持四种后端:JVM、JavaScript、Wasm 和 native。通过用同一个编译器来瞄准所有平台的好处之一是,可以通过定义多平台库分发的新格式 来轻松支持多平台库的开发,这将使得 通过任何主机创建通用的 Kotlin 库 成为了可能。


此外,正如 Michail Zarečenskij 在 Kotlin 2024 大会上的 Kotlin 2.0 演讲中 所解释的那样,多平台支持是零散的,这使得对不同平台的支持很难维护和发展。


在性能方面,K2 显著加快了实际项目的编译时间。JetBrains 表示,K2 的编译速度平均提高了一倍,有些项目编译速度更快了,而有些项目则编译速度则比之更慢了。加速主要与初始化阶段和分析阶段的改进有关,初始化阶段的速度提高了 488%,分析阶段的速度提高了 376%。


除了性能和多平台支持之外,切换到新编译器的另一个关键原因是让语言在解释开发人员的代码意图时更加智能。


这是通过使前端中间表示(Frontend Intermediate Representation,FIR)支持早期的脱糖(desugaring)来实现的,因此编译器有更多的机会分析代码;实现了跨导入、注解和类型的分阶段分析方法,这为集成 IDE 和编译器插件带来了更多机会;以及引入了一种新的控制流引擎,该引擎在类型推断和解析方面有所改进。新的控制流引擎有助于检测异常代码、缺陷和其他潜在问题,从而有助于提高语言的安全性。


由于这些变化带来的语言表达性的改进,Kotlin 2.0 现在能更好地支持运算符和数字转换的组合。例如,语句 longList[0] += 1 现在是被允许使用的,并且也可以与可为 null 的值以及可选的取消引用运算符 ? 结合使用。


Zarečenskij 说,控制流是当今开发人员的主要任务之一。这就是为什么 JetBrains 专注于扩展语言(语法)的功能来检查数据和描述条件,从而提高可读性和消除嵌套层的原因。此外,他说,智能强制类型转换可以减少认知负荷,因为你不需要学习新的结构。


例如,Kotlin 2.0 将在局部变量上传播智能强制类型转换,如下例所示:



fun petAnimal(animal: Any) { if (animal is Cat) { animal.purr() }}
复制代码


同样,智能强制类型转换将被传播,以保存有关可空性(nullability)、 is 检查、  as 强制类型转换和契约的状态。


当 Kotlin 2.0 应用新的智能强制类型转换时,另一种情况是将闭包内捕获的变量作为读 / 写。


Kotlin 将继续增强其控制流引擎,添加无需绑定的模式匹配、上下文敏感的解析、支持更智能强制类型转换的通用 ADT、效果系统等功能。


这些新功能中的很多都在 Kotlin 2.1 或 2.2 的语言路线图中。由于篇幅原因,本文并为涵盖所有新发布的功能,因此不要错过 Kotlin 2024 大会上的演讲,以了解更多详细信息。


原文链接:


https://www.infoq.com/news/2024/05/kotlin-2-k2-compiler/


2024-06-24 10:067044

评论

发布
暂无评论
发现更多内容

美图是如何搭建压测监控一体化平台的?

TakinTalks稳定性社区

压测平台

WEB-INF/web.xml泄露

我是一个茶壶

WEB安全 11月月更 源码泄露

【愚公系列】2022年11月 微信小程序-Request网络请求的封装

愚公搬代码

11月月更

下一代TCP: 网络演进的平台

俞凡

TCP 网络

QUIC不是TCP的替代品

俞凡

TCP 网络 QUIC

还担心接口乱糟糟?快来试试“斯瓦格”在线文档管理平台!

wljslmz

华为云 接口管理 swagger 11月月更

Vue-Vuex学习

格斗家不爱在外太空沉思

vue.js vuex 11月月更

Java中的static关键字详解

共饮一杯无

Java 关键字 11月月更

超全!前端面试题大汇总

肥晨

前端面试题 11月月更 超全前端面试题

SQL 碎碎念,你可能用不到但不能不知道的数据库技巧(2)

百里丶落云

数据库 后端 11月月更

Redis 的 Sentinel 系统

月明风清

redis Sentinel 系统 哨兵机制

易观千帆 | 2022年9月银行APP月活跃用户规模盘点

易观分析

金融 手机银行

【kafka运维】TopicCommand运维脚本

石臻臻的杂货铺

kafka Kafka实战 kafka运维 11月月更

【LeetCode】爱生气的书店老板Java题解

Albert

算法 LeetCode 11月月更

图片懒加载

源字节1号

软件开发

JavaScript基本数据类型和引用数据类型详解

肥晨

js 11月月更 数据结构js

Grafana 最新开源项目 Phlare 速体验

Grafana 爱好者

云原生 可观测性 Grafana 11月月更

Go语言入门13—并发

良猿

Go golang 后端 开发 11月月更

随机森林-概述

烧灯续昼2002

Python 机器学习 算法 sklearn 11月月更

pyside6 qml 支持更新液位的伪3D圆柱

Mr_No爱学习

云原生系列四:Yelp 如何在 Kubernetes 上运行 Kafka

叶秋学长

kafka Kubernetes 云原生 11月月更

去哪儿的常态化容量保障是怎么做的?

TakinTalks稳定性社区

Vue组合式函数(二)封装一个请求

Augus

Vue3 11月月更

chrome调试工具之network

格斗家不爱在外太空沉思

浏览器 11月月更 浏览器调试

SQL Sever提供的字符串类型

乔乔

11月月更

简单剖析开发:区块链杠杆合约交易所的核心优势

W13902449729

区块链交易所 合约交易所开发

微服务架构组件总结篇

邱学喆

负载均衡 Spring Cloud 注册中心 配置中心 熔断服务

vue中网络请求axios的使用和封装

格斗家不爱在外太空沉思

Vue axios 11月月更

不借助 Fiori client,直接在手机浏览器里调用 SAP UI5 BarcodeScanner 实现条形码扫描的可能性?

汪子熙

sdk SAP Fiori SAP UI5 11月月更

Java中的内部类与匿名内部类详解

共饮一杯无

Java 内部类 11月月更 匿名内部类

学生管理系统考试试卷存储方案设计

乖乖IvyShine

Kotlin 2.0 跟随全新的更快、更灵活的 K2 编译器一起发布_编程语言_Sergio De Simone_InfoQ精选文章