JetBrainsがKotlin 1.4.30をリリースした。2021年中頃にGAリリースがスケジュールされているKotlin 1.5(現在はマイルストンリリース)で安定版になる予定の、新たな実験的機能が含まれている。Kotlin 1.4.xとしては最後のインクリメンタルバージョンになると思われる今回のリリースには、新機能として、新たなJVM IR(Internal Representation)コンパイラバックエンド、Java recordとsealedインターフェースのサポート、Kotlin Gradle Pluginでのコンフィギュレーションキャッシュのサポートなどが追加されている。JetBrainsはKotlinコミュニティに対して、これらの新機能、特に新しいJVM IRバックエンドをKotlin 1.4.30アプリケーションで試用して、バグレポートをYouTrackイシュートラッカにレポートするように依頼している。
コンパイラフロントエンドを補完してソースコード解析を行う、新たなJVM IRバックエンド(現在はベータ版)は、Kotlin 1.5では既定のコンパイラになる予定である。このバックエンドは、Kotlin/JVM、Kotlin/JS、Kotlin/Nativeという3つの分類したバックエンドで構成されている。別々に開発されてきた最初の2つが、Kotlin/Native内の新たなJVM IRインフラストラクチャに統合される予定だ。
新バックエンドでの変更には、旧バックエンドにあった多くのバグ修正に加えて、パフォーマンス向上のための新たな言語機能の開発も含まれている。AndroidのUI構築用の新ツールキットJetpack Composeは、この新しいバックエンドでのみ動作するものになる。
JetBrainsのマーケティング責任者であるAlina Grebenkina氏は、3つのバックエンドを統合することのアドバンテージを論じて、次のように記している。
多くのバックエンドロジックを共有し、パイプラインを統合することで、機能実装や最適化やバグ修正の大部分は、一度の実施ですべてをターゲットにできるようになります。
共通のバックエンドインフラストラクチャを持つことは、よりマルチプラットフォームなコンパイラエクステンションへのドアを開きます。パイプラインにプラグインして、処理や変換を追加すれば、自動的にすべてのターゲットで動作するようになるのです。
Java 16のリリースに合わせて、KotlinとJavaとの相互運用性を維持するため、新たなrecord
データ型のサポートが提供されている。Javaのrecord
データ型は、Kotlinでは新しい@JvmRecord
アノテーションを使って宣言する。
@JvmRecord
data class User(val name: String, val age: Int)
この新機能を試すには、コンパイラオプション-Xjvm-enable-preview
と-language-version 1.5
を使用する必要がある。
sealedインターフェースはsealedクラスを補完して、より柔軟なsealedなクラス階層の構築を可能にするために設計された。派生クラスが複数のsealedインターフェースを継承することも可能だ。
sealed interface Fillable {
fun fill()
}
sealed interface Polygon {
val vertices: List<Point>
}
class Rectangle(override val vertices: List<Point>): Fillable, Polygon {
override fun fill() {
/*...*/
}
}
ビルド時のパフォーマンスを改善するため、Kotlin GradleプラグインがGradleコンフィギュレーションキャッシュに対応した。これは、コンフィギュレーションフェーズの結果をキャッシュして、以降のビルドで再利用することでビルド時間を改善する、現在開発中のGradle機能である。以下の例を考えてみよう。
$ gradle --configuration-cache help
Calculating task graph as no configuration cache is available for tasks: help
...
BUILD SUCCESSFUL in 4s
1 actionable task: 1 executed
Configuration cache entry stored.
同じコマンドをもう一度実行すると、次のようになる。
$ gradle --configuration-cache help
Reusing configuration cache.
...
BUILD SUCCESSFUL in 500ms
1 actionable task: 1 executed
Configuration cache entry reused.
ビルド時間の違いに注目してほしい。このプラグインはGradle 5.4以降で動作する。、コンフィギュレーションキャッシュの使用方法に関する詳細は、Gradleの資料に説明されている。
昨年秋にJetBrainsは、Kotlinのアップデートバージョンを6か月毎に提供するという、新たなリリースケイデンスの採用を発表した。
最新リリースに関する詳細は、Kotlin資料の"what's new"セクションで確認できる。