AI 年度盘点与2025发展趋势展望,50+案例解析亮相AICon 了解详情
写点什么

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

评论

发布
暂无评论

方寸之间,书写天地

小天同学

个人总结 4月日更 1 周年盛典 我和写作平台的故事 InfoQ 写作平台 1 周年

变易世界,简易战略,不易华为

脑极体

清理SpringBoot应用无用的metrics指标

远鹏

Java springboot metrics micrometer

年度盛会 | Atlassian Team 2021 全球大会重磅嘉宾介绍

Atlassian

Agile Zoom Atlassian Slack

【基金系列】10年理财规划师经验分享:不想当韭菜就看一下这些内容

小Q

学习 基金会 理财 基金

Java线程讲解,这次没有人学不会了吧!!!

霖~

lombok编译报错:java: 找不到符号

李印

IntelliJ IDEA lombok

荣耀,单刷苹果大boss

脑极体

产品 0 期 - 第八周作业

vipyinzhiwei

模块 1 作业

流水亮

Nginx源码编译安装与运行

马里奥

nginx 安装 笔记

想靠接私活月入5W?建议根据这几个开源的SpringBoot项目(含小程序)模仿一下~

Java架构师迁哥

为什么我们的生活越来越快?

石云升

读书笔记 28天写作 4月日更

计算机原理学习笔记 Day3

穿过生命散发芬芳

计算机原理 4月日更

深度图解Redis Cluster原理

leonsh

redis Gossip redis cluster

Redis-Sentinel 深入浅出原理和实战

leonsh

redis redis sentinel

二阶单位圆

山@支

Zabbix 产品周期

耳东@Erdong

zabbix 4月日更 lifecycle

绝了!阿里面试官跟我死磕MySQL,结果我却拿了个高薪offer

码农之家

Java 程序员 面试 MySQL 高可用 刷题笔记

逐行解读Spring- 没人比我更懂循环依赖

学Java关注我

Java 编程 架构 编程语言 技术宅

应用宝SDK接入记录

风翱

sdk 4月日更 应用宝

第二周作业

Geek_2e7dd7

架构实战营

Vue cli项目 修改运行命令和端口号

空城机

Vue 大前端 4月日更 vue cli

手机自带的多功能百宝箱,没人用真的太可惜了。

彭宏豪95

iphone 效率 工具 苹果 4月日更

重读《重构2》- 提取函数

顿晓

4月日更 提取函数

哭了!从腾讯辞职后找不到工作,投了20多家简历,却只面过一家

Java架构师迁哥

《采访融云CTO杨攀:融云七年发展史》(采访提纲)

后台技术汇

调查采访能力考核

Java入门第一课

ベ布小禅

4月日更

如何横扫大厂Offer?这份“1000道Java后端面试速成笔记”程序员(银四)必备

比伯

Java 程序员 程序人生 软件架构 java编程

Rust:关于闭包的一点研究

Microwood

rust 闭包 closure

洛谷 || 混合牛奶 Mixing Milk(贪心算法)

Bob

算法 刷题 4月日更

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