我們非常高興地給大家帶來了 Kotlin 1.2.70 的更新,這個版本主要修復了一些 Kotlin 1.2 的 bug 並最佳化了開發工具,主要包括:
- Kotlin/JS 的增量編譯效能得到了顯著的提升
- 使用
@OptionalExpectation
對kotlin-stdlib-common
中的一些註解進行了標註 - Kotlin 編譯器包含了使用 Excelsior JET 編譯的二進位制版本
- IntelliJ IDEA 外掛新增了新的用於重構、程式碼審查、程式碼提示等特性
- 修復了很多編譯器以及 IDE 中廣為人知的問題,並進行了效能最佳化
這次更新相容 IntelliJ IDEA 2017.3 – 2018.3 以及 Android Studio 3.1, 3.2 RC 和 3.3 Canary。
我們非常感謝這個版本中的外部的貢獻者: Toshiaki Kameyama, Lucas Smaira, Raluca Sauciuc, Denis Vnukov, Jonathan Lermitage, Jake Wharton, gen, Takasy, Bloder, Artem Zinnatullin, Kenji Tomita, Nico Mandery, Juan Chen
完整的更新內容請參考 更新日誌。下面是本次更新的一些重點內容。
Kotlin/JS 增量編譯
Kotlin/JS 的增量編譯得到了顯著的提升,透過分析工程的結構,增量編譯的構建速度將會達到 7 倍以上。另外,Kotlin/JS Gradle 編譯也已經支援了跨模組增量編譯。
需要指出的是,增量編譯還在試驗階段,預設不會開啟。如果你想要嚐鮮,需要透過以下方式開啟它:
- 對於 Gradle 工程,在
gradle.properties
或者local.properties
中新增kotlin.incremental.js=true
- 對於 IntelliJ IDEA 的工程, 到 Settings -> Build, Execution, Deployment -> Compiler -> Kotlin Compiler -> Kotlin to JavaScript 中選中 Enable incremental compilation (experimental)
無論遇到什麼有關 Kotlin/JS 增量編譯的問題,請你及時反饋告訴我們。
Multiplatform 更新
kotlin-stdlib-common
中引入了許多平臺相關的註解,並用 1.2.60 引入的 @OptionalExpectation
註解來標註它們。編譯器將會在編譯過程中忽略跨平臺程式碼宣告中的這些註解,儘管他們可能沒有具體對應的實現。
例如,我們在跨平臺程式碼中使用 Java 虛擬機器專用的@JvmName
註解,並將這些程式碼編譯成 JavaScript 程式碼時不會遇到任何相關的問題。
前面提到的註解包括: @JsName
, @JvmOverloads
, @JvmStatic
, @JvmName
, @JvmMultifileClass
, @JvmField
,
@JvmSuppressWildcards
, @JvmWildcard
,@Volatile
, @Transient
, @Strictfp
,
@Synchronized
IntelliJ IDEA 支援最佳化
『快速修復(Quick Fix)』可以將集合框架的函式呼叫轉換為序列(Sequence)。
我們現在可以透過『快速修復』將集合框架的變化操作轉換為等價的懶序列變換,這樣可以減少不必要的開銷,對於一些比較複雜的場景將會有顯著的效能提升。
IntelliJ IDEA 外掛的其他最佳化點:
- 將
if
判斷替換為?.let
以及其他類似的操作的提示 - 減少冗餘的
with
呼叫的程式碼檢查 - 將屬性轉換為 getter 轉換為初始化操作的提示
- 將
assertTrue(a == b)
替換為assertEquals(a, b)
的程式碼檢查和快速修復 - “Redundant return label” 檢查
- 預設引數值移除的快速修復
- “
forEach
parameter unused” 檢查 - 很多問題修復和效能提升
二進位制版本的 Kotlin 編譯器
Github releases 裡面除了 Java 虛擬機器版本的 Kotlin 編譯器之外還提供了主流作業系統(Linux、macOS、Windows)下的二進位制版編譯器。它採用 Excelsior JET 編譯,具有啟動速度快的優點,更適用於小檔案的編譯和指令碼的執行。
Excelsior JET 版本的執行時支援一些 JVM 上的以及一些特定的選項,透過 -J
傳給 kotlinc
即可。所有支援的引數請參加 Excelsior JET 說明文件。
如何更新
你可以透過設定中的 Tools -> Kotlin -> Configure Kotlin Plugin Updates 中的 『Check for updates now』 按鈕來更新 IntelliJ IDEA 和 Android Studio 的 Kotlin 外掛,Eclipse 的外掛可以在 Eclipse Marketplace 中更新(請在 Help -> Eclipse Marketplace 中搜尋 Kotlin 外掛)。
當然,不要忘了更新你的工程中 Maven 和 Gradle 指令碼中的 Kotlin 編譯器和標準庫的版本。
如果你遇到任何問題,歡迎來我們的論壇 [英文 中文]中提問,也可以加入 Slack 頻道的討論 (在這裡獲得邀請),或者在 issue tracker 當中提交問題。
Let’s Kotlin!