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