写点什么

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

评论

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

Google 搜索引擎是如何对搜索结果进行排序

Mars

中台 | 中台到底是什么?

xcbeyond

中台 中台架构 中台的由来 28天写作

十三周-作业

水浴清风

第八周 课后作业

简简单单

第八周 学习总结

简简单单

面试官问我:什么是静态代理?什么是动态代理?注解、反射你会吗?

Java鱼仔

Java 反射 动态代理 java反射

Soul网关源码阅读(五)请求类型探索

Java 源码分析 网关

数据应用总结二

Mars

CentOS安装和使用FFmpeg

wangkx

ffmpeg 视频处理

开创我国区块链定制化制造新时代

CECBC

区块链

架构师训练营第二期 Week 13 总结

bigxiang

架构师训练营第2期

极客大学·产品经理训练营·第一章作业

二大爷

产品经理 产品经理训练营

从炒作到风口,谁在引领中国区块链浪潮?

CECBC

比特币 区块链

架构师入门感悟之十三

笑春风

Week13 总结笔记

lggl

第八周 性能优化(二) 作业 「架构师训练营 3 期」

胡云飞

有关单例模式的总结

跳蚤

产品经理训练营笔记-认识产品经理(下)

.nil?

产品经理训练营

Elasticsearch的基础分布式架构

escray

elasticsearch elastic 28天写作 死磕Elasticsearch 60天通过Elastic认证考试

又见拉布拉猪

Justin

28天写作 灌水 减压

产品经理JD调研备忘录

学习高手song轻松

产品

重学JS | Proxy与Object.defineProperty的用法与区别

梁龙先森

大前端 编程语言 28天写作

好书推荐--大数据日知录(深入理解大数据的必备书籍)附电子版下载

五分钟学大数据

大数据

Week13作业

lggl

架构师训练营第三周作业

跳蚤

架构师训练营第二期 Week 13 作业

bigxiang

架构师训练营第2期

今天听课想到的小事

Nydia

区块链世界的中心应该是什么?

CECBC

区块链 区块链数字经济

第一周作业

大熊猫

第一周作业

Geek_ce1551

Java 程序经验小结:性能优化手段之避免创建不必要的对象

后台技术汇

28天写作

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