Kotlin 1.8.0 released at 2022/12/28

Kotlin公式のリリースページ

https://kotlinlang.org/docs/whatsnew18.html

更新の大きな変更点

  1. New experimental functions for JVM: recursively copy or delete directory content
    (JVM の新しい実験的機能: ディレクトリの内容を再帰的にコピーまたは削除)
  2. Improved kotlin-reflect performance
    (kotlin-reflect パフォーマンスの改善)
  3. New -Xdebug compiler option for better debugging experience
    (デバッグ エクスペリエンスを向上させる新しい -Xdebug コンパイラ オプション)
  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 との互換性)

詳細

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()

ディレクトリとその内容を別の宛先にコピーします。

kotlinlang.org

再帰的に削除する関数

deleteRecursively()

ディレクトリとその内容を削除します。

kotlinlang.org

2. Improved kotlin-reflect performance
(kotlin-reflect パフォーマンスの改善)

kotlin-reflectとは

Javaなど、各言語で備えるリフレクション機能のKotlin版。
クラス構造(プロパティなど)を読み取ったり書き換えたりする機能。KClass(クラス参照)、KProperty(プロパティ参照)を利用する。

qiita.com

改善内容

内部キャッシュ機構を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 との互換性)

省略。