AI实践哪家强?来 AICon, 解锁技术前沿,探寻产业新机! 了解详情
写点什么

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:066421

评论

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

浅谈MySQL Binlog日志

闫同学

MySQL 数据库 Binlog 11月月更

一文熟悉 Go 的循环结构 —— for 循环

陈明勇

Go golang for 11月月更 for-range

架构实战营模块6作业-拆分电商系统为微服务

冷夫冲

架构 「架构实战营」

电商平台微服务架构

Jack

架构实战训练营9期

「Go实战」基于Prometheus+Grafana搭建完整的监控系统

Go学堂

golang 程序员 个人成长 监控 11月月更

在使用Note.js的过程中对于tty对于终端的运用、加密模块以及Assert的事件驱动程序的深入运用理解

恒山其若陋兮

前端 11月月更

【web 开发基础】PHP回调函数之变量函数 (35)

迷彩

php 回调函数 11月月更

ubuntu部署ELK-三节点

忙着长大#

ELK

极客时间运维进阶训练营第五周作业

Starry

跳板机逐渐被堡垒机替代的最主要原因是这个!

wljslmz

运维 堡垒机 跳板机 11月月更

防火墙是网络安全的第一道防线,你认同吗?

wljslmz

网络安全 防火墙 11月月更

C++学习---类型萃取---is_function

桑榆

C++ STL 11月月更

分布式锁:不同实现方式实践测评

闫同学

Go 分布式 后端 分布式锁 11月月更

发布MagicOS 7.0, 荣耀如何打造“松弛感”的操作系统?

脑极体

架构模块六-作业

许四多

云原生下日志采集的3种方式

穿过生命散发芬芳

11月月更 云原生日志采集

React源码分析(二)渲染机制

goClient1992

React

电商微服务架构图

Johnny

架构实战训练营9期

Maven 如何配置推送的仓库

HoneyMoose

MobPush for Flutter

MobTech袤博科技

项目经理和Scrum Master之间的不同(译)

Bruce Talk

Scrum 敏捷开发 Agile

【web 开发基础】PHP类静态函数和对象方法的回调 (37)

迷彩

对象 回调函数 11月月更 静态方法 成员方法

CDH5部署三部曲之二:部署和设置

程序员欣宸

大数据 hadoop 11月月更

Mobtech短信验证 for Flutter

MobTech袤博科技

Python: 你所不知道的星号 * 用法

eng八戒

Python 编程

关于登录框的渗透测试

网络安全学海

网络安全 安全 信息安全 渗透测试 漏洞挖掘

【web 开发基础】PHP自定义回调函数之call_user_func_array() (36)

迷彩

回调函数 web开发基础 11月月更 call_user_func_array 自定义回调函数

「Go实战」记一次降低30%的CPU使用率的优化

Go学堂

golang redis 程序员 个人成长 11月月更

【Node.js 】开发中遇到的多进程‘keylog‘ 事件以及TLS/SSL的解决学习方案实战

恒山其若陋兮

前端 11月月更

React源码分析(三):useState,useReducer

goClient1992

React

企业级项目开发中的交互式解释器以及global全局定义、Stream流的合理运用和实战【Note.js】

恒山其若陋兮

前端 11月月更

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