Kotlin 1.6.20では、スタンドアロンのAndroid実行可能ファイル、拡張コンテキストレシーバー、ネイティブの並列コンパイル、厳格なNull非許容型など、多くの新機能が提供される。
バージョン1.6.20では、KotlinコンパイラはAndroidネイティブターゲット用の適切な標準実行可能ファイルを作成できる。しかし以前は、NativeActivityとして使う共有ライブラリしか生成できなかった。この機能を有効にするには、次のbuild.gradleオプションを指定する。
kotlin {
androidNativeX64("android") {
binaries {
executable {
binaryOptions["androidProgramType"] = "standalone"
}
}
}
}
この動作は、Kotlin 1.7ではデフォルトになる。
コンテキストレシーバーは、関数宣言に暗黙的にパラメーターを追加するメカニズムである。暗黙的なパラメーターは、関数シグニチャーの前に付加されたcontext
によって表される。これは、後でwith
ステートメントで渡すことができる。Kotlin 1.6.20より前は、特定の関数に指定できるコンテキストレシーバーは1つだけであった。Kotlin 1.6.20ではその制限が取り除かれ、複数のコンテキストレシーバーを使えるようになった。Kotlin 1.6.20がベータ版として利用できるようになったとき、InfoQはすでにコンテキストレシーバーを記事にしていたため、詳細についてはその記事を参照してください。
厳格なNull非許容型は、ジェネリックJavaクラスやインターフェースとの相互運用性を向上させることを目的としている。この新機能を使うと、T & Any
(T
とNull非許容のAny
の共通部分)型を使って、ジェネリック型パラメーターが厳格なNull非許容型であることを指定できる。これは、たとえば、次のスニペットのように、@NotNull
引数を使ってJavaメソッドをオーバーライドする場合に役立つ。
// given this Java declaration:
// public interface A<T> {
// public T foo(T x) { return x; }
// @NotNull
// public T bar(@NotNull T x) {}
// }
// you can derive from it in Kotlin using:
interface B<T1> : A<T1> {
override fun foo(x: T1): T1
override fun bar(x: T1 & Any): T1 & Any
}
Kotlin 1.6.20で大幅に改善されたもう1つの領域は、Swift、ObjC、Xcode、そして新しいCocoaPods Gradleプラグインとの相互運用性の向上である。Kotlinは、SwiftとObjective-Cコードからのsuspend関数の呼び出しをサポートする。Kotlin 1.6.20では、このような関数は、適切なnull許容を備えたSwift async
関数から呼び出すことができる。Kotlin CocoaPods Gradleプラグインを使うと、KotlinプロジェクトをCocoaPodsと統合するために必要なPodspecファイルを作成できる。
最後に、Kotlin 1.6.20では、パフォーマンスが大幅に向上している。例えば、gradleによっては並列化されない大きなモノリシックモジュールの並列コンパイルをサポート、開発バイナリを構築する際のより高速なインクリメンタルコンパイル、実行の高速化、バイナリサイズの削減などである。
Kotlin 1.6.20には、ここで説明したことよりもはるかに多くの更新があるため、詳細については公式発表をお見逃しなく。