Kotlin 2.0 降臨,迎來嶄新的 K2 Compiler(上)

Andy Lu
6 min readSep 28, 2024
Photo by Daniel Born on Unsplash

Kotlin 於 2011 年發表,2016 年釋出 1.0 版,經過了多年的更新,總算在今年 2024 年(五月)迎來了 Kotlin 2.0。 而在這些年來,Kotlin 已經從當年被 Android 納入官方開發語言,成為跨平台的解決方案之一,如今使用 Kotlin 的開發者,已經不被侷限在 Android 內,漸漸的各大平台都能看到 Kotlin 的蹤影。 Kotlin 所帶來的簡潔、現代化語法,讓當年所有因 Android 而接觸到它的人從喜歡到喜愛,從試用到常用,從 Java 到 Kotlin。正所謂「一試成主顧」,筆者我也是其中一人。

在深入討論 Kotlin 2.0 之前,先來快速了解每一版本的對於 Compiler 的修改:

版本歷史

2016 年二月:Kotlin 1.0 推出。

2017 年二月:Kotlin 1.1 推出,包含 JVM/JS backend。Android 宣布 Kotlin 為 官方語言之一。

2017 年十一月:Kotlin 1.2 推出,包含 Multiplatform Project(Experimental)。

2018 年十月:Kotlin 1.3 推出,包含 Native backend,Coroutine 也釋出正式版。

2020 年八月:Kotlin 1.4 推出,包含新的 JVM/JS IR backend。 2021 年五月:Kotlin 1.5 推出,JVM IR Backend 為穩定版。

2021 年十一月:Kotlin 1.6 推出。

2022 年六月:Kotlin 1.7 推出,推出 JVM K2 Compiler(Alpha 版)。

2022 年十二月:Kotlin 1.8 推出,JS IR Backend 為穩定版。

2023 年二月:Kotlin 1.8.20 推出,K2 Compiler 維持在 Alpha 版,但是修改許多 Bug。加入了 WASM(Web Assembly) backend(Experimental)。

2023 年七月:Kotlin 1.9 推出,JVM K2 Compiler (Beta 版)。

2023 年十一月:Kotlin 1.9.20 推出,WASM backend(Alpha 版)。

2024 年五月:Kotlin 2.0 推出,全新的 K2 Compiler。

生態系調查

Kotlin 每年都會邀請開發者作生態系的調查,從 2021 年~2023 年的報告可以發現, 使用 Kotlin 開發的項目大多分布在 Android 與 Server-Side,而值得注意的是,Android 雖然還是使用 Kotlin 最主要的用途。不過有趣的是,Android 在 2023 年的使用比例卻稍微下降一些,反倒是 Multiplatform 的使用率慢慢上升,這或許也跟 Kotlin Multiplatform 進入 Beta,接著在 2023 年年末進入穩定版有關係。

資料來源:https://www.jetbrains.com/lp/devecosystem-2023/kotlin/

Kotlin Multiplatform

Kotlin Multiplatform(KMP) 目標平台有:Android、iOS、Desktop、Web 以及 Server。因為 Server 原則上是沒有畫面的,所以前面四項被稱為 Client Multiplatform。

KMP 在 2023 年十一月時已經發佈了穩定版,除了 Kotlin/Wasm 還停留在 Alpha 版外,其餘的項目(Kotlin/JVM, Kotlin/JS, Kotlin/Native)都已經進入穩定版,目前編譯成不同平台上,都已經進入穩定版的階段,開發者可以放心的使用。

KMP 能夠用來分享共同的邏輯,但是 UI 呢?依照不同的需求,可以搭配原生的 UI 進行開發,或是完全使用 Kotlin 進行跨平台的開發都可以。iOS 可以使用SwiftUI;Desktop 可以選擇 Swing;當然 Android 就是選擇 Jetpack Compose。若想要 使用 Kotlin 來開發 UI,可以選擇 Compose Multiplatform,Compose Multiplatform 是基於 Jetpack Compose 開發跨平台 UI 解決方案,讓 Compose Multiplatform 共享 UI 的邏輯,而 KMP 分享商業邏輯。如此一來,就能夠使用 Kotlin 從上到下完成所有跨平台的程式碼編寫了,真是太棒了。

而且因為 KMP 的使用是很彈性的,開發者能夠一部分使用 KMP,而另一部分使用原生的程式碼開發,或是全部都是使用 KMP,如此一來開發者就能有不同的方式進行開發,增添了許多可能性,也避免一口氣改成 KMP 可能會有轉換上的困難以及遇到 KMP 沒有辦法處理的情境,不知如何是好。

順帶一提,Kotlin 提供的函式庫中,只要看到 kotlinx 開頭的函式庫,就代表是跨平台專案所使用的,如 coroutineserializationdatetime 等等... 請放心使用在 KMP 上面。

另一方面,到目前為止 Compose Multiplatform 釋出的版本為 1.6.11,其中 Android 以及 Desktop 的項目上已進入穩定版本,可以放心的使用在正式環境上,不過現在仍然還有兩個平台尚未進入穩定版(iOS 在 Beta 版,Web 在 Alpha 版)。所以希望將 Compose Multiplatform 使用在 “全平台” 上,可能還需要再等等。

到現在為止,可以看出 Kotlin 在跨平台的努力已經都已經慢慢的進入穩定版,我們接著就能夠完全使用 Kotlin 進行跨平台的開發了(其實現在就可以了XD)

下一篇文章,我將繼續介紹 Kotlin 2.0 的新的 K2 Compiler,為什麼我們需要新的編譯器呢?先暴雷一下,這一切的一切都與 Kotlin Multiplatform 的佈局有關係。

--

--

Andy Lu

Android/Flutter developer, Kotlin Expert, like to learn and share.