写点什么

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

评论

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

Mac桌面多窗口整理神器Moom,Moom使用教程

Rose

使用Creative Cloud Cleaner Tool mac轻松彻底卸载删除Adobe系列软件

Rose

让你的 Mac 用上最美的屏保,Aerial 使用教程

Rose

Flink 实时湖仓,为汽车行业数字化加速!

阿里云大数据AI技术

大数据 flink 车联网 实时计算

Mac怎么创建txt文件?如何设置新建txt的快捷键?

Rose

50亿美元亏损背后:解析生成式 AI 的商业模式之争

Baihai IDP

程序员 AI 白海科技 LLMs GenAI

笔记 20240615

Geek_d01095

RocketMQ

创新+1+1+1+1!筑牢算力底座,助推AI产业繁荣发展!

天翼云开发者社区

云计算 云原生

photoshop弹出Time to update 提示框,如何关闭

Rose

Final Cut Pro X 插件不能使用出现叹号的解决办法

Rose

积分超市系统(源码 + 文档 + 部署 + 讲解)

深圳亥时科技

释放时序数据活力:Greptime 边云一体解决方案白皮书发布!

Greptime 格睿科技

数据库 开源 数据分析 物联网 边云一体

你知道什么是IP地址全生命周期吗?

郑州埃文科技

IP

数据资产也能入表?企业将迎来哪些变革?

郑州埃文科技

数据 数据资产入表

枫清·天枢多模态智能引擎 V2.1.2 版本正式发布!

Fabarta

图数据库 #人工智能 #大模型 多模态数据库

pr lut插件如何安装? lut预设导入Premiere Pro教程分享

Rose

笔记 20240611

Geek_d01095

Elastic Search

亚马逊云科技宣布为 Amazon ElastiCache 提供预留节点灵活性

伊克罗德信息科技

了解一下,CST软件的TLM求解器

思茂信息

仿真软件 cst使用教程 电磁仿真

Lightroom Classic(Lrc)与Lightroom(Lr)有哪些区别?如何选择LRC和Lr?

Rose

笔记 20240524

Geek_d01095

camunda

笔记 20240530

Geek_d01095

RocketMQ

淘宝1688跨境电商API接口接入指南:跨境卖家必备知识

代码忍者

pinduoduo API

笔记 20240604

Geek_d01095

Spring Cloud Gateway

仓储管理系统-综合管理(源码+文档+部署+讲解)

深圳亥时科技

JavaScript 与 Rust 和 WebAssembly 集成

京东科技开发者

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