写点什么

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

评论

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

测试开发之网络篇-常用命令

禅道项目管理

Linux 命令行

FIL矿机多少钱一台 ?FIL挖矿成本是多少?

pha分币APP系统开发资料

智汇华云|华云数据ArSDN:自主可控的SDN

华云数据

2021 WAIC | EMQ 映云科技:面向云原生的云边协同物联网解决方案

EMQ映云科技

云原生 云端 端边云协同架构 边云协同

深入理解搜索引擎——初识query理解

药老算法

搜索引擎 中文分词 query理解 query纠错 query分析

见康乘拼团软件开发|见康乘拼团系统APP开发

面向编程式多云管理服务时代的华为云MCP多云跨云的容器治理与实践

华为云开发者联盟

容器 云原生 华为云 多云 跨云

pha挖矿/phala挖矿APP系统开发内容

小白也能看懂的Java内存模型

程序猿阿星

JMM Java内存模型 原子性 有序性 可见性;

永续合约交易所搭建,合约平台开发

用中国话学this指向(旧知识新讲)

加百利

JavaScript 大前端 this 7月日更

WorkPlus高端制造行业数字化解决方案—华晨宝马

BeeWorks

开源 即时通讯 IM 案例分享 汽车

就在今天,浪潮云说第二期来啦

云计算

图的应用——关键路径

若尘

数据结构

原来这就是Java IO啊····

华为云开发者联盟

Java 操作系统 进程 IO流 Java IO

多项目同时进行如何做好项目管理?

万事ONES

手写链表之LinkedList源码分析

Ayue、

数据结构

WorkPlus房地产行业数字化解决方案—富力地产

BeeWorks

开源 远程办公 即时通讯 IM

CODING 带你看腾讯新闻 7 日 DevOps 实践

CODING DevOps

DevOps CODING 腾讯新闻

如何利用云原生技术构建现代化应用

阿里巴巴中间件

云计算 阿里云 云原生 中间件

【Flutter 专题】92 图解 Dart 单线程实现异步处理之 Isolate (一)

阿策小和尚

Flutter 小菜 0 基础学习 Flutter Android 小菜鸟 7月日更

毕业季offer怎么拿?收下这份非典型求职面试指南

华为云开发者联盟

面试 职业规划 求职 毕业季 大学生

如何对开发团队的人员进行绩效管理?

万事ONES

研发效能 ONES 绩效管理

一个完整的项目管理流程包括什么?

万事ONES

项目管理 ONES

与微软、IBM同台 斯图飞腾Stratifyd入选G2文本分析Grid报告

Fil和BTC有什么区别?Filecoin挖矿的行情如何?

IPFS BTC fil fil币

WICC 2021召开在即 清华大学教授将分享AI+网络音视频服务研究

融云 RongCloud

互斥锁Mutex:鸿蒙轻内核中处理临界资源独占的“法官”

华为云开发者联盟

鸿蒙 OpenHarmony 鸿蒙轻内核 互斥锁Mutex 临界资源

【LeetCode】主要元素Java题解

Albert

算法 LeetCode 7月日更

Redisson 分布式锁源码 07:公平锁释放

程序员小航

Java redis 源码 分布式锁 redisson

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