菜单

Kotlin 编译器和工具概述

相关源文件

此页面提供了 Kotlin 编译器架构、构建系统和主要组件的高级概述。它是理解 Kotlin 编译器及其相关工具内部工作原理的入口点。有关特定编译器组件的详细信息,请参阅其专用页面,例如 编译器前端编译器中端编译器后端

编译器架构概述

Kotlin 编译器遵循三阶段编译流程,旨在支持从单一代码库到多个目标平台(JVM、JavaScript、Native 和 WebAssembly)的编译。

来源

关键编译器组件

Kotlin 编译器被模块化为几个主要组件

  1. 前端:负责解析、语法分析和语义分析。它有两个实现

    • K1:旧版前端
    • FIR (Frontend IR):新的前端实现
  2. 中端:处理中间表示 (IR),并执行各种转换和优化。

  3. 后端:为特定平台生成代码

    • JVM:生成 Java 字节码
    • JS:生成 JavaScript 代码
    • Native:通过 LLVM 生成原生二进制文件
    • WebAssembly:生成 WebAssembly 代码

来源

构建系统

Kotlin 编译器使用 Gradle 进行构建,并提供复杂的构建配置选项以支持各种开发和测试场景。

Gradle 集成

Kotlin 代码库与 Gradle 深度集成,并包含

  • 用于特殊构建任务的自定义 Gradle 插件
  • 通过版本化实现支持多个 Gradle 版本
  • 适用于不同环境的广泛构建配置属性

来源

构建配置属性

Kotlin 的构建系统通过 Gradle 属性支持众多配置选项

属性目的默认
kotlinLanguageVersion控制默认 Kotlin 语言版本2.2
defaultSnapshotVersion快照的默认版本2.2.255-SNAPSHOT
kotlin.build.report.output控制构建报告null
kotlin.build.postprocessing启用/禁用构建后处理true
kotlin.native.enabled启用/禁用 Kotlin Nativefalse
kotlin.build.useFir为项目使用 FIR 编译器false
kotlin.build.use.absolute.paths.in.klib在 KLIB 中使用绝对路径false

来源

IR 系统和类型转换

IR (中间表示) 系统构成了 Kotlin 编译器中端的主干,为所有目标平台的所有语言特性提供通用表示。

来源

前端 IR (FIR)

FIR (Frontend IR) 是 Kotlin 编译器中现代前端的实现,负责在将 Kotlin 代码转换为通用 IR 之前对其进行解析、分析和验证。

来源

Gradle 插件架构

Kotlin Gradle 插件是将 Kotlin 编译集成到 Gradle 构建中的核心组件。它支持多个 Gradle 版本并适应各种编译场景。

来源

目标平台

Kotlin 编译器从单一代码库针对多个平台。

平台特定后端

来源

编译管道

每个目标平台都遵循类似的编译流程,但具有平台特定的转换和代码生成

平台IR 转换输出格式运行时
JVMJVM 特定优化JVM 字节码JVM
JavaScriptJS 特定优化JavaScript 代码浏览器/Node.js
原生Native 特定优化LLVM IR → Native 二进制文件原生
WebAssemblyWasm 特定优化WebAssembly 二进制文件Wasm 运行时

来源

构建基础设施集成

Kotlin 编译器构建与各种基础设施组件集成,以支持开发、测试和持续集成。

来源

开发与测试

Kotlin 编译器包含一个全面的测试基础设施,用于验证编译器的所有方面。

来源

安全与依赖管理

Kotlin 构建系统包含用于依赖管理和验证的强大安全措施。

来源

结论

Kotlin 编译器是一个复杂的、模块化的系统,旨在将 Kotlin 代码编译到多个目标平台。其架构由前端(包括 K1 和 FIR 实现)、中间端(基于 IR)和用于不同目标的多个后端组成。构建系统基于 Gradle,具有广泛的配置选项和对各种 Gradle 版本的支持。这种模块化设计允许在保持向后兼容性的同时持续演进编译器。

有关特定组件的更多详细信息,请参阅关于 编译器前端编译器中间端编译器后端测试基础设施Kotlin Gradle 插件 的专门 Wiki 页面。