Skip to content

Kotlin 1.7.20 互換性ガイド

言語を現代的に保つ快適なアップデート は、Kotlin言語設計の基本原則の1つです。前者は、言語の進化を妨げる構成は削除されるべきであると述べており、後者は、コードの移行ができるだけスムーズに行われるように、この削除は事前に十分に伝達されるべきであると述べています。

通常、互換性のない変更は機能リリースでのみ発生しますが、今回はKotlin 1.7の変更によって導入された問題の拡散を制限するため、インクリメンタルリリースでそのような変更を2つ導入しなければなりません。

このドキュメントはそれらを要約し、Kotlin 1.7.0および1.7.10からKotlin 1.7.20への移行に関する参照を提供します。

基本的な用語

このドキュメントでは、いくつかの種類の互換性について説明します。

  • ソース: ソース非互換の変更とは、かつては問題なく(エラーや警告なしで)コンパイルされていたコードが、コンパイルされなくなることです。
  • バイナリ: 2つのバイナリ成果物は、それらを相互に交換してもロードまたはリンケージエラーが発生しない場合、バイナリ互換であるとされます。
  • 振る舞い: 変更が振る舞い非互換であるとされるのは、その変更を適用する前後で、同じプログラムが異なる振る舞いを示す場合です。

これらの定義は純粋なKotlinに対してのみ与えられていることを覚えておいてください。他の言語の観点(例えばJava)からのKotlinコードの互換性は、このドキュメントの範囲外です。

言語

適切な制約処理を修正するためのロールバックの試み

Issue: KT-53813

コンポーネント: コア言語

互換性のない変更の種類: ソース

概要: KT-52668で説明されている変更の実装後に1.7.0で現れた、型推論の制約処理における問題を修正する試みをロールバックします。この試みは1.7.10で行われましたが、それは今度は新しい問題を引き起こしました。

非推奨サイクル:

  • 1.7.20: 1.7.0の振る舞いにロールバック

複数のラムダと解決との問題のある相互作用を避けるため、一部のビルダー推論ケースを禁止する

Issue: KT-53797

コンポーネント: コア言語

互換性のない変更の種類: ソース

概要: Kotlin 1.7では、無制限ビルダー推論と呼ばれる機能が導入され、これによって@BuilderInferenceアノテーションが付けられていないパラメーターに渡されるラムダもビルダー推論の恩恵を受けることができました。しかし、そのようなラムダが関数呼び出し内に複数発生した場合、いくつかの問題を引き起こす可能性がありました。

Kotlin 1.7.20では、対応するパラメーターに@BuilderInferenceアノテーションが付けられていないラムダ関数が複数あり、かつそのラムダ内の型の推論を完了するためにビルダー推論の使用を必要とする場合に、エラーを報告するようになります。

非推奨サイクル:

  • 1.7.20: そのようなラムダ関数でエラーを報告します。-XXLanguage:+NoBuilderInferenceWithoutAnnotationRestriction を使用して、一時的に1.7.20以前の振る舞いに戻すことができます。