こんにちは、こちらの記事はKotlin Advent Calendar 2021の16日目の穴埋め記事です。
え?もう2022年じゃないのって?
あけおめということでお許しください。
今回は、Kotlinの新しいコンパイラのご紹介です。
コンパイラが変わったKotlin
Kotlinのコンパイラは実は大きく変わっています。
既存のコンパイラが改善されたというのではなく、真新しいコンパイラになっているようです。
新しいコンパイラは、k2compilerと呼ばれています。
一連のツイート、公式ブログ、ユーチューブの動画などで詳細を確認できます。
- JetBrainsの公式サイトなど
- 翻訳記事
以下、僕が読んで噛み砕いた内容なので、元ソースで読みたい人には不要かもしれません。
ザックリ把握したい人は読んでもらえればと思います。
変わったポイント:IRが生成されるようになった
ポイントとしては、コンパイラフロントエンドにもIRがあること(FIR)、コンパイラバックエンドにもIRがあることです。
FIRでIDEを強化
コンパイラフロントエンドのIRによりコード補完やシンタックスに関わる部分などIDEフレンドリーになっているらしいです。これにより、言語そのものだけでなくIDEの改善にも寄与できる点がJetBrainsとしての強みが出せているのではないかなと思います。
We’re working on the new compiler frontend. It generates a frontend intermediate representation (FIR), which is a syntax tree with semantic info stored directly in it. It contains all the semantic info in its nodes without using a separate data structure, like the old frontend. pic.twitter.com/5PTrFVpfTp
— Kotlin (@kotlin) October 28, 2021
コンパイラバックエンドIRで言語の開発速度アップ、コンパイラがパワーアップ
コンパイラバックエンドのIRに関してJVM、JS、Nativeで共通であるため言語自体の開発コストが下げられます。それだけでなくそれぞれのランタイムに対してコンパイルのoptimizationを使用出来るメリットがあります。
The new #k2compiler already works this way. All new backends share the intermediate representation of the code to simplify the process of generating target code for different platforms. pic.twitter.com/IMqMY63Vo0
— Kotlin (@kotlin) October 28, 2021
IR生成フェーズが入って、コンパイルは遅くならないの?
むしろ、既存のコンパイラと比べるとコンパイルタイムも速いらしい。自分はIRを生成するフェーズが増えるためコンパイルタイムが長くなるかなとか安直に考えてたのですが、そうではないらしいですね。理由としてはoptimizationのおかげらしいのですが、具体的な根拠は僕自身よく分かっておりません(ゴメンナサイ)
ベンチとか取ってたら見てみたい。
どのバージョンからコンパイラは新しくなる?
実は、Kotlin/JVMであれば1.5の途中から既にデフォルトになっていました。もうstableです。 1.5.x の前半までは開発者がオプションで選べは使用できるという形でした。
Kotlin/JSはまだベータです。2022/01/02現在、オプションで新しいコンパイラを使用できるという段階です。
Kotlin/Nativeに関しては元からk2コンパイラのベースとなるものが使われて(るはず)です。
まとめ
- Kotlinは今後もコンパイラが改善されていく
- IDEも便利になっていくはず
ということで目に見える派手な機能追加とかではないわけですが、地味に嬉しい改善についてのご紹介でした。
興味がある方は実際のソースコードや公式サイトの情報を見てもらえればと思います。
0 件のコメント:
コメントを投稿