2022/01/03 このエントリーをはてなブックマークに追加 はてなブックマーク - 大きく変わったKotlinのコンパイラについて(k2compiler)

大きく変わったKotlinのコンパイラについて(k2compiler)

カテゴリ:

こんにちは、こちらの記事はKotlin Advent Calendar 2021の16日目の穴埋め記事です。

え?もう2022年じゃないのって?
あけおめということでお許しください。

今回は、Kotlinの新しいコンパイラのご紹介です。





Kotlinのコンパイラは実は大きく変わっています。
既存のコンパイラが改善されたというのではなく、真新しいコンパイラになっているようです。
新しいコンパイラは、k2compilerと呼ばれています。

一連のツイート、公式ブログ、ユーチューブの動画などで詳細を確認できます。

以下、僕が読んで噛み砕いた内容なので、元ソースで読みたい人には不要かもしれません。
ザックリ把握したい人は読んでもらえればと思います。


ポイントとしては、コンパイラフロントエンドにもIRがあること(FIR)、コンパイラバックエンドにもIRがあることです。

FIRでIDEを強化

コンパイラフロントエンドのIRによりコード補完やシンタックスに関わる部分などIDEフレンドリーになっているらしいです。これにより、言語そのものだけでなくIDEの改善にも寄与できる点がJetBrainsとしての強みが出せているのではないかなと思います。


コンパイラバックエンドIRで言語の開発速度アップ、コンパイラがパワーアップ

コンパイラバックエンドのIRに関してJVM、JS、Nativeで共通であるため言語自体の開発コストが下げられます。それだけでなくそれぞれのランタイムに対してコンパイルのoptimizationを使用出来るメリットがあります。



むしろ、既存のコンパイラと比べるとコンパイルタイムも速いらしい。自分はIRを生成するフェーズが増えるためコンパイルタイムが長くなるかなとか安直に考えてたのですが、そうではないらしいですね。理由としてはoptimizationのおかげらしいのですが、具体的な根拠は僕自身よく分かっておりません(ゴメンナサイ)
ベンチとか取ってたら見てみたい。


実は、Kotlin/JVMであれば1.5の途中から既にデフォルトになっていました。もうstableです。 1.5.x の前半までは開発者がオプションで選べは使用できるという形でした。
Kotlin/JSはまだベータです。2022/01/02現在、オプションで新しいコンパイラを使用できるという段階です。
Kotlin/Nativeに関しては元からk2コンパイラのベースとなるものが使われて(るはず)です。


  • Kotlinは今後もコンパイラが改善されていく
  • IDEも便利になっていくはず

ということで目に見える派手な機能追加とかではないわけですが、地味に嬉しい改善についてのご紹介でした。
興味がある方は実際のソースコードや公式サイトの情報を見てもらえればと思います。




0 件のコメント:

コメントを投稿

GA