https://kotlinlang.org logo
#arrow-meta
Title
# arrow-meta
t

Travis Miehm

11/29/2023, 4:11 PM
We are trying to update our project to Kotlin 1.9.21, but are blocked on a dependency on a arrow-meta plugin. I’ve seen some mention about pausing development while JetBrains stabilized the K2 Compiler API, but now arrow-meta is not mentioned in the docs https://apidocs.arrow-kt.io/index.html Is development still just paused? I haven’t followed K2 much, so I don’t know if it’s stabilized yet, or if that’s coming in Kotlin 2.0. Is there appetite for a PR updating arrow-meta to support 1.9.21?
j

Javier

11/29/2023, 4:17 PM
@Alejandro Serrano.Mena was maintaining the upgrades the last time I saw them. I don't know if he plans to do more upgrades until the compiler API is stable. But feel free to open a PR with any Kotlin version and it will be reviewed and merged for sure. The development is paused in terms of adding new features and so on. As KSP is not going to be a Compiler Plugin anymore and then that implies they are totally dropping the support for FIR and IR, Arrow Meta is the only solution to create compiler plugins easily "in the market", so I doubt this is going to be dropped. There are plans related to what Arrow Meta will be as there are some playground projects like Arrow Reflection which can bring/replace ideas to Arrow Meta. @raulraja can give more details about this last part.
r

raulraja

11/29/2023, 5:20 PM
From my understanding, Kotlin still doesn't have a stable API for compiler plugins. Please let me know if this is incorrect. The process of auto-discovery and integration of compiler plugins with the FIR IDE is also unclear. In my view, it doesn’t seem practical for arrow-meta to develop a metaprogramming framework until Kotlin introduces a public API for compiler plugins, which currently have limited support in the IDE. Our goal was to make macros as easily as demonstrated in the examples at https://github.com/arrow-kt/arrow-reflection/blob/main/arrow-reflect-compiler-plugin/src/testData/box/product_test.kt https://github.com/arrow-kt/arrow-reflection/blob/main/arrow-reflect-annotations/src/main/kotlin/arrow/meta/samples/Product.kt However, achieving this required us to use many undocumented APIs. We've faced similar challenges with other plugins we developed, like Arrow Analysis and Type proofs, where we had to create a duplicated structure for resolving call candidates. Overall, my experience over the past five years has shown that Kotlin isn’t particularly friendly to metaprogramming. While I'm now focusing on AI, I would appreciate a robust metaprogramming solution for Kotlin, but I suspect significant advancements won’t occur until the compiler allows for greater extensibility. Ultimately, it seems the Kotlin development team may have their reasons for not embracing metaprogramming capabilities, even though tools like Compose and Serialization have had to rely on compiler plugins.
d

dmitriy.novozhilov

11/29/2023, 6:52 PM
Yes, it's correct Three are no plans for meta-programming in the nearest future (like in 2.2 scope), sorry
👍 3