概要
JetBrainsは8月26日、Kotlin 2.4.20のリリース候補版となる「2.4.20-RC2」を公開した。今年6月24日のBeta1、7月22日のBeta2、8月12日のRCを経て積み上げてきた機能群を引き継ぎつつ、RC2ではコンパイラやツールチェーンに残っていた不具合を集中的に修正している。正式版のリリースが近づいており、開発の最終段階に入ったことを示す動きだ。
標準ライブラリの新機能
今回の2.4.20系統の目玉の一つが、標準ライブラリへのStackTraceRecoverableインターフェースの導入だ。Beta1で追加されたこの仕組みにより、コルーチンをまたいで例外が伝播する際に失われがちだったスタックトレース情報を、より正確に復元できるようになる。非同期処理のデバッグでは呼び出し元のコンテキストが分かりにくくなる問題が長年指摘されてきており、この改善は実用上のメリットが大きい。
あわせて、コレクション要素の比較を扱う関数群も拡充された。Beta1では複数要素が全て等しいかを一括判定するallEqualがIterableに追加され、続くBeta2では要素が全て異なることを検証するallDistinct()と、キー抽出関数を指定できるallDistinctBy()が追加された。従来は自前でループやSetを使って実装する必要があった等価性・一意性チェックを、標準APIだけで簡潔に書けるようになる。
Kotlin/NativeのSwiftエクスポート拡張
Kotlin/Native向けのSwift Export機能も継続的に強化されている。Beta2ではsealedクラスのサポートが加わり、プロパティやインターフェース実装を含むクロスランゲージ継承にも対応した。これによりKotlinで定義したより複雑な型階層を、Swift側からより自然な形で扱えるようになる。Beta1からRCにかけては、ジェネリック型の上限境界解決の失敗、プロトコルメンバーへの不正な可用性(unavailability)情報の伝播、ファクトリ関数名とクラス名の衝突といった細かな不具合も順次修正されており、iOSやmacOSアプリ開発でKotlin Multiplatformを利用するチームにとって実用性が着実に高まっている。
RC2での修正点と今後の見通し
RC2自体は新機能よりも安定化に重点を置いた更新で、ネストしたループ内で2つのnull許容ローカル変数を相互に代入した際にKotlin/NativeのコンパイラがStackOverflowErrorを起こす問題、Compose compilerでwhen式内のラムダから非ローカルリターンが実行されない不具合、@Serializableが付与されたenumをKotlin/JSでコンパイルする際に発生するIllegalStateException、Gradle for Wasmでユーザー定義のwebpack設定の適用順序がずれる問題などを修正した。目立った新機能追加のないRC2という位置づけからも、Kotlin 2.4.20の正式リリースが目前に迫っていることがうかがえる。