写点什么

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

评论

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

fetch --nohooks webrtc 失败

webrtc developer

万界星空科技MES系统:食品加工安全的实时监控与智能管理

万界星空科技

mes 万界星空科技 食品MES 食品行业 食品

开发一个 PicGo 插件

yuanyxh

前端 PicGo js

数据驱动新时代:数据飞轮如何唤醒中台潜能

不叫猫先生

大数据 数据中台 数据仓库 数据飞轮

阿里巴巴API助力电商:商品详情获取与数据驱动的完美结合

技术冰糖葫芦

API Gateway API 接口 API 测试 pinduoduo API

TikTok怎么开直播?TikTok直播专线是什么?

Ogcloud

海外直播专线 tiktok直播 tiktok直播专线 海外直播网络 tiktok直播网络

TikTok直播专线服务商推荐

Ogcloud

海外直播专线 tiktok直播 tiktok直播专线 tiktok直播网络 TikTok跨境直播

离散制造 vs 流程制造:锚定精准制造未来,从装配线到化学反应,实时数据集成在制造业案例中的多维应用

tapdata

数据库

tair性能挑战赛攻略心得-Zzzzz

阿里云天池

四类取整方式

不在线第一只蜗牛

c++ C#

工业物联网PaaS平台的商业模式研究

不在线第一只蜗牛

云原生 物联网 PaaS

试用完几十款ETL工具后的经验总结,ETL工具用这三款就足够了

谷云科技RestCloud

kettle ETL DataX ETL数据集成

Mint Expedition Season 3 拉开帷幕:登顶高峰的时刻到了

NFT Research

blockchain web3 空投

Flink垃圾图片分类优胜奖比赛攻略_贪吃的小香猪-148队

阿里云天池

2024中国算力大会,河南如何绘写算力长卷?

脑极体

AI

关于深度学习量化的操作

芯动大师

深度学习 gpu 模型化

VLDB 2024 圆桌会议回顾:展望物联网与 AI 时代的时序数据库

Apache IoTDB

干货满满!第二期流程挖掘实践训练营圆满落幕~

望繁信科技

流程挖掘 流程资产 流程智能 数字北极星 望繁信科技

mac苹果电脑办公套件全家桶下载:Office2019 for Mac 下载

你的猪会飞吗

Microsoft Office 2019 office 2019 mac破解软件下载

从数据仓库到数据飞轮:数据技术演进的探索与思考

不叫猫先生

数据中台 数据仓库 数据 数据飞轮

TON基金会与Curve Finance合作:推出基于TON的新型稳定币互换项目

区块链软件开发推广运营

交易所开发 dapp开发 链游开发 NFT开发 公链开发

谷歌云推出全新区块链RPC服务:简化Web3开发

区块链软件开发推广运营

交易所开发 dapp开发 区块链开发 公链开发 代币开发

茶思屋直播|TinyEngine+AI:聚焦主航道,在实践中探索低代码技术黑土地

OpenTiny社区

低代码 OpenTiny TinyEngine

VLDB 2024 圆桌会议回顾:展望物联网与 AI 时代的时序数据库

Apache IoTDB

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