写点什么

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

评论

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

《深入理解JavaScript特性》学习总结1-ES6基础知识点总结

肥晨

箭头函数 11月月更 ES6基础知识点总结

好家伙!阿里P8撰写的Java微服务架构全栈笔记GitHub一夜飞到榜首

小二,上酒上酒

Java 架构 面试 微服务

完整会议议程:NGINX Sprint China 2022 年度线上大会

NGINX开源社区

nginx

袋鼠云数栈UI5.0体验升级背后的故事:可用性原则与交互升级

袋鼠云数栈

2022年互联网主要技术方向招聘需求变化:人工智能岗位需求增加87.7%;SQL在就业语言需求中位列第一

雨果

sql

最新出炉!开源 API 网关的性能对比:APISIX 3.0 和 Kong 3.0

API7.ai 技术团队

kong api 网关 APISIX

为什么晶闸管能在大电流下工作?

元器件秋姐

元器件采购 元器件电商 元器件知识 华秋商城 晶闸管

2022开源之夏|EMQ三大开源项目开发圆满收官

EMQ映云科技

开源 物联网 IoT mqtt 11月月更

《深入理解JavaScript特性》学习总结2-ES6基础知识点总结

肥晨

11月月更 ES6基础知识点总结 解构赋值

低学历并不是阻碍职业发展的绊脚石

测吧(北京)科技有限公司

软件测试

redhat运维-远程日志记录

阿柠xn

运维 日志 linux 文件权限控制 11月月更

遭MQ连连干翻后的醒悟!含恨码出5本MQ学习手册助力秋招之旅

小二,上酒上酒

面试 RocketMQ 大厂 大厂面试

Meta Force 原力元宇宙dapp系统开发(智能合约部署)

开发微hkkf5566

这些小技巧,让你的前端编程更优雅

好程序员IT教育

前端

图文实录|UIE:基于统一结构生成的通用信息抽取

澜舟孟子开源社区

爆肝了!阿里出版的这份Spring Security源码手册,狂揽GitHub榜首

小二,上酒上酒

Java 面试 spring security 大厂 大厂面试

java培训学习该怎么做?

小谷哥

蚌住了!这份阿里P8写的Java多线程编程实战指南就这么容易开源?

小二,上酒上酒

Java 面试 多线程 阿里 大厂面试

神了!阿里P8纯手写出了这份10W字的MyBatis技术原理实战开发手册

小二,上酒上酒

学习 编程 面试 mybatis

万物皆可集成系列:低代码对接Web Service接口

葡萄城技术团队

【web 开发基础】PHP 自定义函数之函数的返回值-PHP 快速入门 (27)

迷彩

web开发基础 PHP基础 11月月更 return

3年测试经验跳槽成功拿下30W+年薪

测吧(北京)科技有限公司

软件测试

商业银行普惠金融可持续发展综合能力呈现梯队化,专项领域各有所长

易观分析

普惠金融

数字化开采|AIRIOT智慧矿山自动化生产解决方案

AIRIOT

低代码 物联网 智慧矿山

20个值得收藏的实用JavaScript技巧

千锋IT教育

阿里P8偷偷把内网分享的SpringCloud微服务架构精髓手册开源了

小二,上酒上酒

架构 面试 微服务 Spring Cloud

为什么面试官狂问八股文?我已经被三家公司问到哑口无言……

程序知音

Java java面试 java架构 后端技术 Java面试八股文

Github上架3天星标55K,阿里最新产架构师速成手册成功颠覆了我的认知

程序员小毕

分布式 微服务 程序人生 架构师 Java后端

深圳市数字经济指数发布:数字经济蓬勃发展,数字用户深度渗透

易观分析

数字经济 深圳

CSS修改单选框样式(element)

肥晨

11月月更 单选框样式修改 element单选框样式

大规模预训练模型:探讨与展望

澜舟孟子开源社区

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