语言版本设置是 Kotlin 编译器的一个核心组件,负责管理不同 Kotlin 版本之间的兼容性并控制功能的可用性。该系统使编译器能够根据配置的 Kotlin 版本确定哪些语言功能可用、哪些会产生警告,以及哪些会产生错误。
语言版本设置系统包含几个关键组件,它们协同工作以提供特定于版本的语言行为。
来源
LanguageVersion 枚举代表从 1.0 到当前版本的特定 Kotlin 版本。每个版本都有关联的属性,用于确定其在编译器中的状态。
来源
LanguageFeature 枚举定义了所有语言功能及其引入版本、功能种类和行为。每个功能都有一个状态,可以是:
ENABLED - 功能完全可用ENABLED_WITH_WARNING - 功能正常工作,但会产生警告DISABLED - 功能不可用来源
Kotlin 中的语言功能遵循特定的生命周期,该生命周期决定了它们如何引入和稳定。
来源
这是一个功能在不同版本中演进的示例:
| 阶段 | 描述 | 示例 |
|---|---|---|
| 介绍 | 功能作为实验性功能或在特定的 Kotlin 版本中引入 | ValueClasses 以实验性功能引入 |
| 预览 | 功能可用,但可能产生警告 | JvmInlineValueClasses 在 KOTLIN_1_5 中 |
| 稳定 | 功能完全支持 | TypeAliases 在 KOTLIN_1_1 中 |
| 弃用 | 功能开始产生警告 | 当有替代功能更受青睐时 |
| 删除 | 功能完全移除 | 很少发生,通常在长期弃用后 |
来源
语言版本设置在诊断报告系统中起着至关重要的作用。当代码使用了在指定语言版本中不受支持的功能时,会生成相应的错误或警告。
来源
编译器支持“渐进模式”,该模式会自动启用标记为 canBeEnabledInProgressiveMode = true 的功能。此模式通过启用稳定的即将推出的功能来帮助开发人员为未来的 Kotlin 版本做好准备。
来源
Kotlin 使用特定的状态标识来管理不同的版本。
此表反映了代码库中的版本状态常量。
| 常量 | 值 | 描述 |
|---|---|---|
FIRST_SUPPORTED | KOTLIN_1_8 | 仍在支持的最旧版本 |
FIRST_NON_DEPRECATED | KOTLIN_2_0 | 第一个未弃用的版本 |
LATEST_STABLE | KOTLIN_2_2 | 最新的稳定版本 |
来源
Kotlin 编译器在整个过程中都使用语言版本设置系统来做出特定于版本的决策。
来源
语言版本设置可以通过多种方式配置:
| 配置方法 | 描述 |
|---|---|
| Gradle | kotlinOptions.languageVersion, kotlinOptions.apiVersion |
| 命令行 | -language-version, -api-version |
| IntelliJ IDEA | 项目设置 → Kotlin 编译器 → 语言版本 |
| 独立功能 | -XXLanguage:+FeatureName 用于启用,-XXLanguage:-FeatureName 用于禁用 |
-progressive 标志也可用于启用所有标记为适合渐进模式的功能。
来源
当某个功能在配置的语言版本中不受支持时,会生成特定的诊断消息。
UnsupportedFeature 诊断同时包含功能标志和语言版本设置,这使得错误消息能够准确地解释哪个功能不可用以及它从哪个版本开始支持。
来源