这是一个 Kotlin CLR 后端编译器, 旨在将 Kotlin 代码编译为 .NET CIL, 使得 Kotlin 开发者可以在 .NET 平台上使用 Kotlin 语言进行开发
compiler编译器核心, 使用 Kotlin/JVM 编写, 依赖官方的 kotlin-compiler-embeddablehomekotlin-homeclr/libKotlin/CLR 标准库(.dll)jvm/libKotlin/JVM 标准库(.jar)
src/commonMain/kotlin编译器核心代码Library.ktKotlin/CLR 标准库编译入口MainCLR.ktKotlin/CLR 编译入口MainJVM.kt官方 Kotlin/JVM 编译入口
csharpC# 部分AssemblyResolver使用 C# 基于 Assembly API 实现的程序集解析器, 用于解析 .dll 文件并传递给 Kotlin/CLR 编译器kotlin-stdlibKotlin 标准库的 C# 实现, 用于提供 Kotlin 标准库的支持KotlinCLR一个常规的 C# 项目, 用于测试和演示KotlinCLR/gen包含从kotlin编译而来的 C# 代码
kotlin一个使用 Kotlin/CLR 的 Kotlin 项目, 用于测试和演示stdlibKotlin/CLR 编写的标准库, 暂未使用, 作为未来的标准库实现
- 使用 Intellij IDEA 打开本项目, 使用 Rider / Visual Studio 打开
csharp子目录 - 使用 Rider / Visual Studio 构建
AssemblyResolver项目 - 使用 Rider / Visual Studio 构建
kotlin-stdlib项目, 并将生成的kotlin-stdlib.dll放入compiler/home/clr/lib目录下 - 打开
compiler/src/commonMain/kotlin/MainCLR.kt文件, 修改 sdkHome 为符合你本地环境的 .NET SDK 路径 - 使用 Intellij IDEA 运行 Gradle 任务
:compiler:jvmRun -DmainClass=MainCLRKt即可将kotlin目录内的源码编译至csharp/KotlinCLR/gen目录下 - 使用 Rider / Visual Studio 运行
KotlinCLR项目
- 使用官方 kotlin-compiler-embeddable, 复用官方编译器组件进行 Configuration, Frontend, Fir2Ir 编译
- 编写 Kotlin/CLR 后端编译器将 Kotlin IR 降级并生成 C# 源码
- 使用 C# 编写的 AssemblyResolver 解析 .dll 文件, 并将其传递给 Kotlin/CLR 编译器
- 使用 C# 编写的标准库和 AssemblyResolver 为 Kotlin/CLR 提供标准库
- 通过 ClrSymbolProvider 提供 C# 的符号解析, 使得 Kotlin/CLR 可以使用 C# 的类型和方法
短期内编译到 C# 可以更快见效, 性价比更高, 未来会直接生成 CIL
编译器还没搓完, 部分语法还没支持, 编译 Kotlin 标准库会报错(x