写点什么

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

评论

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

和鲸101计划:以神经计算建模培训,助力北大学术人才培养

ModelWhale

数据 建模

和鲸101计划:以数据能力助力南开大学新文科建设

ModelWhale

数据 新文科

深入理解 Python 类中的各种方法

我再BUG界嘎嘎乱杀

Python 编程 后端 开发语言

AI安全水深流急,黄铁军首谈AGI能力与风险分级,2024智源大会圆满落幕

智源研究院

接口测试:Mock 的价值与意义

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

测试

打造安全高效的数字货币交易平台:交易所开发全攻略

区块链软件开发推广运营

交易所开发 dapp开发 区块链开发 链游开发 NFT开发

CCF 数据库专委会铂金合作伙伴

TDengine

数据库 涛思数据 tdengine

北京人工智能数据运营平台发布,并开源超大规模高质量数据集

智源研究院

2024北京智源大会开幕,智源推出大模型全家桶及全栈开源技术基座新版图,大模型先锋集结共探AGI之路

智源研究院

智领云端,逐梦低空:中国电信成立低空经济产业联盟

脑极体

AI

今日分享丨浅谈配置中心对配置的集中管理

inBuilder低代码平台

微服务 云原生 配置管理

什么是浅拷贝和深拷贝,如何用 js 代码实现?

不在线第一只蜗牛

JavaScript 拷贝

太空策略单机游戏推荐:群星Stellaris 游戏支持win和mac下载

你的猪会飞吗

Mac游戏下载 群星游戏下载

Axios 和 Fetch: 深入比较HTTP请求工具

Liam

JavaScript 前端 HTTP axios Fetch

“技术故障”背刺巴菲特,金融大模型到底靠不靠谱?

Openlab_cosmoplat

人工智能 金融

和鲸101计划:经管大数据课程教学训练营线下培训圆满收官

ModelWhale

数据 经管

AI 人 吐 槽 大 会

白洞计划

AI

Shell 循环语句:重复任务的自动化利器

左诗右码

火山引擎助力自动驾驶:云原生合规专区回灌集群解决方案

极客天地

软件测试学习笔记丨Python常用第三方库 yaml

测试人

Python 软件测试 yaml 测试开发

智源联合多所高校推出首个多任务长视频评测基准MLVU

智源研究院

IPv6改造是什么意思?网站IPv6改造怎么做?

国科云

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