News

K2 コンパイラーが Kotlin 2.0 で安定版に

Read this post in other languages:

JetBrains は長らく Kotlin コンパイラー(コードネーム「K2」)の新しいフロントエンドに取り組んできました。 このフロントエンドはコードの構文を解析してセマンティック解析、データフロー解析、呼び出し解決、および型推論を実行するコンパイラーの構成要素であり、 開発者が最もよく関わるコンパイラーの構成要素でもあります。 また、IDE 内で継続的に動作してすべてのエラーと警告メッセージを報告し、ユーザーが自動補完、セマンティクスを認識するインスペクション、インテンション、リファクタリングなどのタスクを行えるようにする役割も担っています。 新しいフロントエンドはすでにプレビューが公開されていますが、私たちはその継続的な改善と安定化に努めており、今後の Kotlin リリースでデフォルトのコンパイラーフロントエンドにする予定です。 そして、今後予定されているこのリリースを Kotlin 2.0 と名付けることにしました。 Kotlin 2.0 リリースのロードマップ、JetBrains の取り組みと期待される成果については以下をお読みください。

Kotlin 2.0 のリリースロードマップについて

従来のバージョン管理を引き継ぐ Kotlin 1.9 を別途リリースする予定です。このリリースには、安定化に近づいている開発中の K2 コンパイラーフロントエンドのアップデートも含まれます。 Kotlin 1.10 は予定されていません。 Kotlin 1.9 の次のメジャーバージョンは Kotlin 2.0 となります。

Kotlin 2.0 をリリースする理由

フロントエンドはコンパイラーの重要な構成要素です。K2 コンパイラーフロントエンドは単に従来のフロントエンドをリファクタリングしたものではなく、新しいアーキテクチャに基づいてゼロから完全に書き直されています。 JetBrains はこれまでさまざまなブログ、動画、およびカンファレンス講演で技術的な変更点を詳細に公開してきました。 さらに情報が必要な場合は、The Road to the K2 Compiler から読み始めることをお勧めします。 手短に言えば、新しいアーキテクチャは設計によって高速化と拡張性の向上が図られており、従来のコンパイラーフロントエンドが抱えていた技術的負債の解決と各所におけるバグとコーナーケースの修正がなされています。また、この言語の将来的な拡張への道を切り開くものとなっています。

プログラミング言語では重要な機能や大規模な変更が導入される場合にメジャーバージョンが増分されるのが一般的です。 しかし、ソフトウェアプログラムでは機能セットがほぼ変わらない場合でも大幅な書き換えによって大規模な改良が行われる場合にはメジャーバージョンが増分されます。 Kotlin は言語ではありますが、このソフトウェアの慣習に従うことにしました。 そもそも Kotlin コンパイラーはソフトウェアの大作だからです。 Kotlin 言語のバージョンは、そのコンパイラーのバージョンによって定義されます。 Kotlin の仕様は言語のリファレンスとして提供されているものであり、それを定義するものではありません。

コードが動作しなくなることはありますか?

Kotlin は言語バージョンがアップデートされるたびに変化しています。 新しい言語機能が導入されると、古いバグが修正されます。 私たちはコードが動作しなくなる変更の数や影響を最小限に抑えながら、Kotlin 言語の進化プロセスに従うように常に努めています。 この点に関しては Kotlin 2.0 も例外ではありません。

Kotlin 2.0 には意識的に新しい機能を導入しないようにしています。 Kotlin コンパイラーフロントエンドの書き換えは大規模な変更であり、それだけで多数の改善が導入されます。 新しいデータフロー解析アルゴリズムの精度が向上し、スマートキャストがこれまでの限界を超えて改善されているのはその一例にすぎません。具体的な例については、これらの課題をご覧ください。 これにより、古いフロントエンドの Kotlin 1.9 でコンパイルされない赤いコードが Kotlin 2.0 では緑のコードに変わります。厳密に言えば、これは新しい Kotlin 言語機能の特徴です。 しかし、これは単に新しいコンパイラーアーキテクチャによってもたらされた副次的効果です。

また、ずっと未解決だった多数のバグが修正された結果、必然的にこれらの修正の一部によって不正なコンパイラーの動作に偶発的に依存していたコードが動かなくなる可能性があります。 私たちは K2 フロントエンドの新旧の動作の変化による影響については慎重に調査を進めており、変更によってかなりの数の Kotlin ユーザーに影響する可能性がある場合は、意に反してでも可能な限り以前の動作を再現できるようにさらに努めていく予定です。

また、Kotlin 1.9 から Kotlin 2.0 へのコードを移行することによる影響を最小限に抑えられるように努めています。 Kotlin 2.0 の安定化プロセスに関して最新情報をお伝えし、テスト中に見逃した可能性のあるリグレッションをご報告いただけるよう、ユーザーのプロジェクトで Kotlin 2.0 を事前に試すのに十分な時間を提供する予定です。 現在は今年後半に予定しているベータ品質の K2 コンパイラーフロントエンドのリリースに重点的に取り組んでいます。これについては、こちらのロードマップの課題で追跡できます。

Kotlin 2.0 の IDE サポートについて 

Kotlin IDE プラグインは、IntelliJ IDEA と Android Studio のアップデートにバンドルされています。 このプラグインにはコードのセマンティック解析を行える Kotlin コンパイラーフロントエンドが含まれていますが、これは実際にコードをコンパイルするために使用されている Kotlin コンパイラーのバージョンではありません。実際のバージョンはビルドファイル内の設定で決まります。 つまり、Kotlin 言語バージョン 2.0 でコードをコンパイルする場合は新しいコンパイラーフロントエンドを使用するため、新しいコンパイラーアーキテクチャのパフォーマンスのメリットをすべて生かすことができますが、 IDE は古いフロントエンドを使ってコードを検査している可能性があります。

新しいコンパイラーフロントエンドのパフォーマンスのメリットを IDE で生かせるようにするため、K2 コンパイラーフロントエンドを基礎に構築される新しいバージョンの Kotlin IDE プラグインを作成中です。 現在、この新しい IDE プラグインのパブリックプレビューに向けて取り組んでいます。 最新情報は、こちらの課題で追跡できます。

Kotlin 2.0 の後の予定

Kotlin 2.0 コンパイラーフロントエンドの新しいアーキテクチャにより、多数の便利な新機能を新たに実装することができます。 KT-10468 のコンテキストレシーバーなど、このような機能の一部は古いコンパイラーフロントエンドでプレビューとして提供されていますが、Kotlin 2.0 ではデフォルトでオンになりません。 これらはプレビュー段階に留まる予定です。 新機能の安定化は、今後の Kotlin 2.x リリースで私たちのパイプラインに含まれている他の新機能の実装と合わせて実施されます。 いつものように、Kotlin のロードマップを通じて計画に関する更新情報を定期的にお知らせする予定です。

Kotlin 3.0 のリリースはいつ頃になりますか? それはまだ不明です。 将来の言語に対する多くの大規模な変更については、前回の Kotlin 機能アンケートで最もリクエストの多かった事項を中心に暫定的な話し合いの場を持つようにしています。 これらの変更の一部が、Kotlin の次期メジャーバージョンをリリースするに値するほど大きな変更であることも確かです。

ご支援いただくには

新しいコンパイラーフロントエンドを試してフィードバックをお寄せください! Kotlin 1.8.20 からは通常の Kotlin 言語バージョンフラグを使って Kotlin 2.0 言語バージョンのプレビューを有効にできます。

Kotlin K2 コンパイラーを有効にする

詳細情報

オリジナル(英語)ブログ投稿記事の作者:

Ryuji Owan

Roman Elizarov

image description

Discover more