JetBrainsはKotlin1.6.20-M1をリリースした。これは、次のGAリリースのプレビューバージョンであり、コンテキストレシーバー、コンパイル時間を短縮するためのいくつかのパフォーマンス改善オプション、同時ガベージコレクターが取り入れられる。
IntelliJ IDEAまたはAndroid Studioは、「ツール - Kotlin - Kotlinプラグインアップデートの設定」で早期アクセスプレビュー機能を使用するように設定できる。次に、最新のプレビューバージョンをインストールする。アプリケーションのビルドスクリプトは、最新のKotlinプレビューバージョン1.6.20-M1に更新する必要がある。
コンテキストレシーバーは、1つだけではなく複数のレシーバーをサポートする。関数、プロパティ、クラスの宣言に追加してコンテキスト依存にすることができる。すべてのコンテキストレシーバーは、呼び出し元のスコープで暗黙のレシーバーとして宣言する必要がある。たとえば、Logger
への参照を含むインターフェイスを宣言し、LoggingContext
インターフェイスを暗黙のレシーバーとして宣言して、関数内でlogger
プロパティを使用する。
interface LoggingContext {
val logger: Logger
}
context(LoggingContext)
fun saveUser(student: Student) {
// Logic to save the user to the database
logger.info("User has been saved in the database")
}
現在、機能をテストするために、-Xcontext-receivers
コンパイラオプションを使用してプレリリースバイナリを作成できる。この機能はまだ完成していないため、バイナリを本番環境で使用することはできない。また、IDEからのサポートは最小限の範囲である。
モジュール内のすべてのファイルを並行してコンパイルしてコンパイル時間を短縮するために、実験的なJVM IRバックエンドモードが導入された。コンパイラオプション-Xbackend-threads
によって、このモードが有効になり、スレッド数は、マシンのCPUコアごとに1つのスレッドを使用する0、あるいはマシンのCPUコア数よりも小さい値のいずれかに設定できる。コンパイル時間の短縮とのトレードオフはヒープメモリの増加で、使用されているスレッドの数に比例する。
ビルドがビルドツールによってすでに並列化されている場合は、並列化の別のレイヤーを追加すると、ビルド時間がさらに長くなる可能性がある。kaptはバックエンドモードを無効にするため、JVM IRバックエンドモードはメンテナンスされなくなったkaptアノテーションプロセッサでは機能しない。
gradle.properties
を設定することで、Kotlin/JS IRコンパイラを使った開発バイナリのインクリメンタルコンパイルが利用できるようになった。
kotlin.incremental.js.ir=true
インクリメンタルコンパイルを有効にした後、compileDevelopmentExecutableKotlinJs
Gradleタスクを使うと、コンパイラは以前のモジュールコンパイルをキャッシュする。特に小さな変更では、モジュールを再度コンパイルする代わりにモジュールキャッシュを使用できる。
デフォルトでは、Kotlin 1.6.20によって、マルチプラットフォームプロジェクトの階層構造サポートが有効となる。これによって、ネイティブターゲット間でソースコードを共有し、ビルドセットアップがシンプルになり、IDEサポートが改善する。
Kotlin/Nativeコンパイルのパフォーマンスは実行時間、バイナリサイズ、コンパイル時間を短縮することで改善された。これは、コンパイラによって生成された合成オブジェクトのいくつかが静的に初期化され、コンパイラキャッシュが最適化されたことによる。新しいメモリマネージャーは実行時間を短縮し、ガベージコレクションスイープフェーズの同時実装が含まれるようになった。これは-Xgc=cms
で有効にできる。