写点什么

KSP2 致力于改善 Kotlin 元编程,并添加对 K2 Kotlin 编译器的支持

  • 2024-01-30
    北京
  • 本文字数:860 字

    阅读完需:约 3 分钟

KSP2 致力于改善 Kotlin 元编程,并添加对 K2 Kotlin 编译器的支持

KSP 2.0 是 Kotlin 符号处理(Kotlin Symbol Processing)的演进版本,目前处于预览状态,谷歌的软件工程师 Ting-Yuan Huang 和 Jiaxiang Chen 说到,它引入了新的架构,旨在解决 KSP 1.0 中的一些局限性,并增加了对新的 K2 Kotlin 编译器的支持。


KSP1 是作为编译器插件的形式实现的,而 KSP2 是一个独立的库,无需设置编译器即可运行,并能完全控制其生命周期。Huang 和 Chen 说,这使得以编程方式调用 KSP 以及在 KSP 处理器中设置断点变得更容易。下面的代码展示了如何配置 KSP2 并执行它来处理符号的列表:


val kspConfig = KSPJvmConfig.Builder().apply {  // All configurations happen here.}.build()val exitCode = KotlinSymbolProcessing(kspConfig, listOfProcessors, kspLoggerImpl).execute()
复制代码


KSP2 中另外一个值得注意的差异是,它使用了仍处于 beta 状态的 Kotlin K2 编译器来处理源码。不过,如果你愿意的话,也可以通过在gradle.properties中设置languageVersion属性,从而以 K1 的方式使用 KSP。


除此之外,KSP2 还旨在解决 KSP1 中的一个缺陷,即同一个源文件可能会被编译多次。借助与 K2 的集成,KSP2 尝试调整 K2 编译文件的方式,使其只处理一次,从而能够提升性能。


KSP2 还引入了一些行为的变化,以提高开发人员的工作效率,以及可调试性和错误恢复能力。


在 KSP 1.0.14 或更新的版本中,可以在gradle.properties中使用一个标记来启用新的 KSP 预览版本:


ksp.useKSP2=true


KSP 是一个支持创建插件来扩展 Kotlin 编译器的 API。它以独立于编译器的方式理解 Kotlin 的语言特性,如扩展函数、声明处型变(declaration-site variance)和局部函数。


该 API 根据 Kotlin 语法在符号层对 Kotlin 程序结构进行建模。当基于 KSP 的插件处理源程序时,处理器可以访问类、类成员、函数和相关参数等构造结构,而 if 代码块和 for 循环等则无法访问。


这使得基于 KSP 的插件不像建立在 kotlinc 之上的插件那样脆弱,后者功能更强大,但是严格依赖于编译器的版本。


原文链接:

https://www.infoq.com/news/2024/01/ksp2-kotlin-metaprogramming/

2024-01-30 08:004155

评论

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

博云容器云、DevOps平台斩获可信云“技术最佳实践奖”

BoCloud博云

容器 DevOps 云原生 容器云

8 年产品经验,我总结了这些持续高效研发实践经验 · 研发篇

尔达Erda

产品 程序员 云原生 研发 效能

更新|3DCAT实时云渲染 v2.1.2版本全新发布

3DCAT实时渲染

如何创建一个有效的帮助文档?

Geek_da0866

聊聊Java中代码优化的30个小技巧

苏三说技术

人人可参与开源活动正式上线,诚邀您来体验!

阿里巴巴云原生

阿里云 开源 云原生 龙蜥社区

3DCAT v2.1.3新版本发布,这三大功能更新你不容错过!

3DCAT实时渲染

一周活动速递|深入浅出第8期;Meetup成都站报名进行中

OceanBase 数据库

Rainbond插件扩展:基于Mysql-Exporter监控Mysql

北京好雨科技有限公司

云原生 #Kubernetes#

实时云渲染有哪些优势

3DCAT实时渲染

实时云渲染

「行话」| 用DevOps高效交付游戏,是种什么体验?

极狐GitLab

git DevOps gitlab 敏捷开发 游戏开发

RTC 性能自动化工具在内存优化场景下的实践

字节跳动视频云技术团队

性能优化 RTC 内存优化

越来越成熟的Rust,都应用了哪些场景呢?

非凸科技

rust

免费的低代码开发平台有哪些?

优秀

低代码 低代码开发平台

大型仿人机器人的技术难点和应用情况

优必选科技

机器人

如何选择数字孪生可视化平台

3DCAT实时渲染

数字孪生

【帮助中心】为您的客户提供自助服务的核心选项

Geek_da0866

Auditing相关注解

Damon

7月月更

云VR:虚拟现实专业化的下一步

3DCAT实时渲染

Cloud XR

为什么数字化未来取决于3D实时渲染

3DCAT实时渲染

实时云渲染

Cloud XR面临的问题以及Cloud XR主要应用场景

3DCAT实时渲染

Baklib:制作优秀的产品说明手册

Baklib

Go语言系列:Go从哪里来,Go将去哪里?

小黑豆豆

后端 阅读 Go 语言 7月月更

喜讯!瑞云科技被授予“海上扬帆”5G融合应用专委会成员单位

3DCAT实时渲染

5G

国际权威认可!OceanBase入选Forrester Translytical数据平台报告

OceanBase 数据库

oceanbase

我们常用于猜数字游戏的二分查找算法怎么用python实现呢?

迷彩

算法 二分查找 7月月更 经典算法

多租户软件开发架构

力软低代码开发平台

云流化和云桌面有什么关系

3DCAT实时渲染

关于云XR介绍,以及5G时代云化XR的发展机遇

3DCAT实时渲染

XR 云XR

关爱一线防疫工作者,浩城嘉业携手高米店街道办事处共筑公益长城

联营汇聚

ThreadLocal夺命11连问

苏三说技术

多线程

KSP2 致力于改善 Kotlin 元编程,并添加对 K2 Kotlin 编译器的支持_编程语言_Sergio De Simone_InfoQ精选文章