我們很高興地正式釋出Kotlin 1.2.50,一個針對Kotlin 1.2的bug修復和功能性更新的版本。
該正式版的主要更新內容:
- Eclipse IDE的Kotlin外掛得到了更新
- 在標準庫的公共及JS部分新增了新函式
- 我們為kotlin.test帶來了最新的JUnit 5
- 改善了對實驗性指令碼的支援
- 在IntelliJ IDEA中引入了可執行Kotlin scratch檔案
- 現在kapt及使用Gradle構建Android專案時的速度變得更快了
- 透過二進位制相容模式以支援實驗性的\@JvmDefault
- 引入了漸進編譯模式
- 修復編譯器及IDE外掛大量已知的問題,同時其效能也有所提升
這個更新相容自2017.2到2018.2 EAP版本的所有IntelliJ IDEA,以及Android Studio 3.0,3.1和3.2 Canary。
我們同樣感謝在該版本中提交了PR的外部程式碼貢獻者: Toshiaki Kameyama, Mikaël Peltier, Raluca Sauciuc, meztihn, Ivan Gavrilovic, Denis Vnukov, Derek, Florian Steitz, Jim S, Evgeny Zakharov, Aaron Nwabuoku, Alexey Belkov, Claus Holst, Elifarley C, Felix Guo, Gabryel Monteiro, Gilkeson, Juan Chen, Mon_chi, Valeriy Zhirnov, Steven Spungin, Swapnil Sankla, TakuyaKodama, 還有 Kenji Tomita
可以在更新日誌中檢視完整的更新列表,接著來探討重點的部分。
Eclipse IDE外掛的更新
我們十分自豪地宣佈Eclipse IDE外掛的最新版本0.8.5。除了支援Kotlin 1.2.50外,該更新版帶來了數個新特性及效能改進,例如:
- 支援如kotlin-allopen和kotlin-spring的編譯外掛
- 支援設定所生成JVM位元組碼的版本
- 修復了Java to Kotlin轉換器及偵錯程式中的bug
可以在Preferences | Kotlin | Compiler中找到應用於工作區範圍的Kotlin編譯器配置, 允許你更改編譯器外掛及其他編譯器選項。同樣可以只部署專案級別的配置。
該Eclipse更新外掛已經在Eclipse Marketplace上架。 查閱‘Getting Started’教程以獲取更多細節。
庫的更新
在該更新中,標準庫的公共及Kotlin/JS部分新增了一組Byte,Short,Int和Long型別的擴充套件函式toString(radix: Int),這都是Florian Steitz的功勞。在實驗中的多平臺專案和JavaScript專案中,他們已可投入使用。
而Valeriy Zhirnov貢獻了另一個變更,增加了兩個方便將CharArray轉換為String建構函式:String(chars: CharArray) and String(chars: CharArray, offset: Int, length: Int)。
此外,kotlin.test庫現在支援使用JUnit 5框架和單獨的模組kotlin-test-junit5進行測試,該模組在JUnit 5之上提供Asserter的實現,並將測試註釋從kotlin-test-annotations-common對映到 JUnit 5測試註釋。
此外,kotlin.test庫現在支援在單獨的模組kotlin-test-junit5中使用JUnit 5框架進行測試,其提供基於JUnit5的Asserter實現,並將kotlin-test-annotations-common的測試註釋對映到JUnit 5測試註釋中。
對實驗性指令碼支援的改進
該版本中引入了新的實驗性指令碼支援,自定義指令碼編寫更方便,在標準編譯器和IDEA外掛上執行更容易,建立嵌入式指令碼也更簡單。可以在KEEP中查詢到關於指令碼的應用場景及當前的開發進度。值得關注的點有:
- 現在可以建立一個定義指令碼的jar包,如果將該jar包新增到編譯路徑中,編譯器和IDEA外掛將自動支援這種型別的指令碼
- 現在可以將已確定型別的外部變數傳遞給指令碼編譯,就好像它們是指令碼定義的全域性變數一樣
- 指令碼支援的結構變得更為簡單了,而且透過提供的工具庫,將比以前更簡單地實現和嵌入自主的指令碼宿主
IntelliJ IDEA外掛的改進
可執行的Kotlin scratch files和Kotlin指令碼
這個Kotlin的IDEA外掛更新引入了對可執行指令碼scratch files的支援。也可以使用專案中的宣告:
同時,IDE對Kotlin Script(* .kts)檔案的支援也得到了改善。 你現在可以在專案檢視中建立新指令碼,並在它們所在模組的類路徑中直接執行。
原生字串的輸入和縮排
得益於更新後的IDE外掛,現在可以更輕鬆地輸入原生字串,並會自動插入成對的”””,提供文字縮排的intention(感謝我們的貢獻者Toshiaki Kameyama)。這在你貼上多行字串時非常有用:
其他IntelliJ IDEA外掛的改進
- 一些新的inspections和intentions,以輔助kotlinx.coroutines檢查未被使用的Deferred和async結果,並將async(ctx){}.await()轉換為withContext(ctx){}
- 尾行註釋和塊註釋互相轉換的intention
- 修復了大量bug,提高了穩定性,改進了效能
更快的Gradle構建
從Kotlin 1.2.50開始,Kotlin將跟蹤多模組Android專案模組的增量變動。這顯著加快有多個相互依賴模組的大型Android專案的增量構建。
編譯器的變動
Kotlin 1.2.50修復了編譯器中的許多已知問題,改進了效能和提高了穩定性,並新增了以下的新功能:
漸進編譯模式
Kotlin編譯器中大部分的bug和不一致的問題都儘快被處理,但部分修復可能是無法向後相容的。Kotlin compatibility policy規定只在大版本(例如1.1和1.2)中引入這些的修復,並允許一個長時間的遷移過程。 儘管如此,我們相信許多使用者能更快從這些錯誤修復獲益,使程式碼更安全簡潔。
在該版本中,我們引入了一個實驗性的漸進編譯模式,用於積極定期更新Kotlin編譯器和工具到最新版本的維護者的程式碼庫。 在該模式下,針對不穩定程式碼的deprecations和bug-fixes將會立即生效。 因此當啟用該模式後,部分程式碼可能會在Kotlin版本更新後崩潰。
漸進編譯模式下啟用的修復不會影響程式碼庫中的太大部分,即便它們不是靜默工作,需要維護人員手動修改錯誤的程式碼段。我們將盡可能在IDE外掛中提供自動遷移工具。該方式修復的所有程式碼脫離該模式仍然能正常執行。關於在漸進編譯模式下,執行修復程式所遇到的問題的示例,請參考KT-9580,KT-16681或KT-17981。
可以透過向Kotlin編譯器新增-Xprogressive標記以啟用該模組的漸進模式。
@JvmDefault binary compatibility模式
已經實驗性地支援使用@JvmDefault為JVM介面生成預設方法,以便相容Kotlin介面以binary-compatible模式編譯生成的預設方法。新增編譯器標記-Xjvm-default = compatibility以開啟這個模式。
同樣需要注意的是,現在已不再支援1.2.40中引入的編譯標記-Xenable-jvm-defaul。請用-Xjvm-default=enable代替。
引數檔案
Kotlin 1.2.50允許透過命令列傳遞-Xargfile = args.txt檔案中的編譯器引數,這便於在引數中使用較長的檔案路徑呼叫命令列編譯器。
如何升級
若要更新IntelliJ IDEA或Android Studio上的外掛,選擇 Tools | Kotlin | Configure Kotlin Plugin Updates,點選’Check for updates now’按鈕。Eclipse IDE的外掛可以透過 Eclipse Marketplace (選擇Help | Eclipse Marketplace並搜尋Kotlin外掛)安裝或更新。
同時,別忘了在Maven或Gradle構建程式碼中更新你的編譯器和標準庫的版本。
一如以往,當你在新版本中遇到任何問題,歡迎在論壇、slack(在這裡獲取邀請)尋求幫助,或者向我們的問題跟蹤報告。
請盡情享受Kotlin!