谷歌在今年的 I/O 大會上宣布,Kotlin 編程語言現(xiàn)在是 Android 應(yīng)用程序開發(fā)人員的首選語言(谷歌宣布 Kotlin 成為安卓開發(fā)首選)。 還有一個好消息, Kotlin 1.3.30 正式發(fā)布,做了對apple的支持。離上次發(fā)布1.3 時間過去半年。本次的該版本主要覆蓋 1.3 版本的問題修復(fù)和工具完善。版本更新的主要范圍為 Kotlin/Native、KAPT 的性能優(yōu)化以及對 IntelliJ IDEA 的支持優(yōu)化。 我們來回顧下 1.3的 新特性 穩(wěn)定的協(xié)程 Kotlin/Native Beta 多平臺項目和工具 用于 Kotlin/Native 和多平臺的工具 Ktor 1.0 Beta
本次版本帶來的牛逼特性主要對1.3完善,并且做了工具上的支持。
KAPT 支持注解處理器增量編譯
KAPT 已經(jīng)支持注解處理器增量編譯,該特性仍處灰度實驗階段,你可以通過在gradle.properties中添加以下配置來啟用它: kapt.incremental.apt=true 需要指出的是,在現(xiàn)有版本中引入任何非增量編譯的注解處理器或者依賴的變化(截止目前,包括內(nèi)部聲明的修改)都會導(dǎo)致該模塊的注解處理過程退化為非增量模式。 KAPT: 其他提升
引入了兩個配置來提升編譯性能。其一是使用 Gradle workers:
這個版本也對它做了優(yōu)化。另一個是 1.3.20 引入的,開啟 Compile Avoidance,就是說依賴如果只有方法體發(fā)生變化,那么就跳過注解處理。只有在所有的注解處理器都顯式的在注解處理的 classpath 聲明的情況下,Compile Avoidance 才會生效。
無符號數(shù)組的擴(kuò)展方法
從 1.3 開始我們可以在開發(fā)模式下使用無符號數(shù)值類型。這個版本我們對無符號類型以及其數(shù)組做了更多的支持:
需要注意的是,我們之前就可以在無符號數(shù)組上使用函數(shù)式操作例如 filter 和 map ,這是因為無符號類型的數(shù)組實際上是實現(xiàn)了 Collection 接口的,例如 UIntArray 實現(xiàn)了 Collection 接口。 不過這樣就涉及到了性能問題,因為在 UIntArray 被當(dāng)作 Collection的實例使用時會額外 創(chuàng)建 一個對象出來?,F(xiàn)在好了,所有新增的擴(kuò)展函數(shù)都使用無符號數(shù)組類型作為 receiver 以消除額外的對象創(chuàng)建開銷。因此不用擔(dān)心,現(xiàn)在無符號數(shù)組和常規(guī)數(shù)值類型的數(shù)組從使用的角度來講沒有什么兩樣,不會有任何額外的開銷了。
Kotlin/Native
Kotlin/Native 支持的目標(biāo)平臺有: Windows 32 位(mingw_x86)。除此之外,Windows 和 macOS 用戶也可以混合編譯 Kotlin/Native 程序到 Linux x86-64、arm32 以及 Android 和 Raspberry PI 環(huán)境上。 Kotlin/Native 對 Apple 平臺的支持
對 Apple 平臺的支持也有提升。iOS 上未處理的異常信息會被輸出到 iOS 崩潰日志當(dāng)中,iOS 和 macOS 上的異常堆棧(調(diào)試模式)也會包含符號信息。 現(xiàn)在也可以使用命令行參數(shù) -Xstatic-framework 或者以下 Gradle 腳本來構(gòu)建靜態(tài)庫: 需要注意的一點,現(xiàn)階段官方表示拉取和編譯這些依賴仍然需要一個 Xcode 工程。
Kotlin/Native IDE 支持
接下來我們同步下我們的 IDE 對 Kotlin/Native 的支持工作的進(jìn)展。 除 IntelliJ IDEA 之外,我們也將發(fā)布 Kotlin/Native 插件支持 CLion 2019.1、AppCode 2019.1。C interop 描述文件 (.def) 后續(xù)也會得到所有 IDE 的支持,盡管目前代碼補(bǔ)全功能還沒有上線。 對于 CLion and AppCode, 我們也支持了異常堆棧跳轉(zhuǎn)源碼的支持。 ## IntelliJ IDEA 支持
調(diào)試功能的提升
當(dāng)你在調(diào)試協(xié)程代碼時,你可以看到有一個單獨的異步堆棧 “Async stack trace” 顯示掛起時的變量。 當(dāng)程序在 suspend 函數(shù)或者 Lambda(例子的第 13行)中的斷點停止時, “Async stack trace” 顯示了變量在上一次掛起時的狀態(tài)(12行)。你可以瀏覽 suspend 函數(shù)在當(dāng)前協(xié)程中從上一個掛起點的全部的堆棧 (第12、4行)并確認(rèn)變量的值: 這會幫助你更方便的理解當(dāng)前協(xié)程的運行狀態(tài)。 在調(diào)試 Kotlin 代碼時,可以選擇 “Kotlin” 模式來查看變量。 Eclipse IDE 插件更新
Eclipse 插件 0.8.14 主要包含以下更新:Kotlin 1.3.30 編譯器支持, 大量的問題修復(fù)和整體穩(wěn)定性的提升。該版本也增加了對 Gradle 工程的實驗性質(zhì)的支持。你可以用 Eclipse Buildship 導(dǎo)入工程,你會發(fā)現(xiàn) Kotlin 會被正常配置。
指定 JVM 版本
如果你的程序運行在 JVM 9, 10, 11, 或者 12 等版本下,你可以設(shè)置 jvmTarget到對應(yīng)的版本了。這個設(shè)置會影響編譯的 class 文件的字節(jié)碼版本,但它們不是后向兼容的。相比之下,新目標(biāo)版本不會有任何字節(jié)碼優(yōu)化也不會有任何新特性,期待后續(xù)Kotlin繼續(xù)更新。 寫在最后 無論 Google 對Kotlin 賦予什么期望,總而言之,Google提出新的系統(tǒng)和跨平臺方案,意味著Andorid 生態(tài)已經(jīng)向不同領(lǐng)域發(fā)力,最近微軟的反擊也預(yù)示者,google的跨端計劃已經(jīng)對微軟形成了火力壓制,坐等大安卓起飛,移動開發(fā)下一春不遠(yuǎn)了。 于此同時微軟也在大力發(fā)展自己的.net語言的跨平臺,并且也在支持 Pyhon開發(fā)語言的各種工具,其實是在對 Flutter和Kotlin 提出了挑戰(zhàn)。 大家如何看待 Kotlin 的未來? 歡迎交流~