Kotlin 1.8.0 released at 2022/12/28
Kotlin公式のリリースページ
https://kotlinlang.org/docs/whatsnew18.html
更新の大きな変更点
- New experimental functions for JVM: recursively copy or delete directory content
(JVM の新しい実験的機能: ディレクトリの内容を再帰的にコピーまたは削除) - Improved kotlin-reflect performance
(kotlin-reflect パフォーマンスの改善) - New -Xdebug compiler option for better debugging experience
(デバッグ エクスペリエンスを向上させる新しい -Xdebug コンパイラ オプション) - kotlin-stdlib-jdk7 and kotlin-stdlib-jdk8 merged into kotlin-stdlib
(kotlin-stdlib-jdk7 と kotlin-stdlib-jdk8 を kotlin-stdlib に統合) - Improved Objective-C/Swift interoperability
(Objective-C/Swift の相互運用性の向上) - Compatibility with Gradle 7.3
(Gradle 7.3 との互換性)
詳細
1. New experimental functions for JVM: recursively copy or delete directory content
(JVM の新しい実験的機能: ディレクトリの内容を再帰的にコピーまたは削除)
この機能は実験的なため、使用したい場合はオプトインが必要。
@OptIn(kotlin.io.path.ExperimentalPathApi::class)
もしくは、
@kotlin.io.path.ExperimentalPathApi
もしくは、コンパイルオプションに、
-opt-in=kotlin.io.path.ExperimentalPathApi
を記述する。
再帰的にコピーする関数
copyToRecursively()
ディレクトリとその内容を別の宛先にコピーします。
再帰的に削除する関数
deleteRecursively()
ディレクトリとその内容を削除します。
2. Improved kotlin-reflect performance
(kotlin-reflect パフォーマンスの改善)
kotlin-reflectとは
Javaなど、各言語で備えるリフレクション機能のKotlin版。
クラス構造(プロパティなど)を読み取ったり書き換えたりする機能。KClass(クラス参照)、KProperty(プロパティ参照)を利用する。
改善内容
内部キャッシュ機構をJavaのClassValueに移行した事により、キャッシュ対象が増えた。
1.8より前
- KClass (クラス定義そのものの情報)
1.8
- KClass (クラス定義そのものの情報。)
- KType (変数の型情報)
- KDeclarationContainer (調べたが、よく分からず...)
これにより、指定した型のインスタンスを取得するtypeOf()をコール時のパフォーマンスが向上した。
3. New -Xdebug compiler option for better debugging experience
(デバッグ エクスペリエンスを向上させる新しい -Xdebug コンパイラ オプション)
最適化を無効にして、デバッグしやすくするオプション、らしい。
現時点では、コルーチンの最適化を外せる。
将来的には、他の最適化も無効にできるようにする、との事。
具体的な恩恵
最適化機能がONの場合、サスペンド関数中の変数を最適化する。
そのため、変数の値を見る事ができない。
これが、-Xdeugオプションによって、見る事ができるようになる。
4. kotlin-stdlib-jdk7 and kotlin-stdlib-jdk8 merged into kotlin-stdlib
(kotlin-stdlib-jdk7 と kotlin-stdlib-jdk8 を kotlin-stdlib に統合)
省略。
5. Improved Objective-C/Swift interoperability
(Objective-C/Swift の相互運用性の向上)
省略。
6. Compatibility with Gradle 7.3
(Gradle 7.3 との互換性)
省略。