在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ Android/ Kotlin兼容性
Kotlin內(nèi)聯(lián)函數(shù)
Kotlin開發(fā)環(huán)境設置(Eclipse)
Kotlin調(diào)用Java代碼
Kotlin使用Ant
Kotlin編譯器插件
Kotlin相等性
Kotlin JavaScript模塊
編寫Kotlin代碼文檔
Kotlin返回和跳轉(zhuǎn)
Kotlin異常處理
Kotlin可見性修飾符
Kotlin委托
Kotlin委托屬性
Kotlin編碼約定/編碼風格
Kotlin基礎(chǔ)語法
使用Kotlin進行服務器端開發(fā)
Kotlin接口
Kotlin反射
Kotlin類型別名
Kotlin枚舉類
Kotlin當前版本是多少?
Kotlin注解處理工具
Kotlin類型的檢查與轉(zhuǎn)換
Kotlin屬性和字段
Kotlin類型安全的構(gòu)建器
Kotlin相比Java語言有哪些優(yōu)點?
Kotlin JavaScript反射
Kotlin 是什么?
Kotlin泛型
Kotlin慣用語法
Kotlin與OSGi
Kotlin數(shù)據(jù)類型
Kotlin是面向?qū)ο筮€是函數(shù)式語言?
Kotlin動態(tài)類型
Kotlin協(xié)程
Kotlin操作符符重載
Kotlin使用Gradle
Kotlin密封類
Kotlin兼容性
Kotlin集合
Kotlin調(diào)用JavaScript
Kotlin null值安全
Kotlin函數(shù)
Kotlin開發(fā)環(huán)境設置(IntelliJ IDEA)
Kotlin嵌套類
Kotlin控制流程
Kotlin和Java語言比較
Kotlin 與 Java 語言兼容嗎?
Kotlin教程
Kotlin類和繼承
Kotlin對象表達式和對象聲明
JavaScript中調(diào)用Kotlin
Kotlin區(qū)間/范圍
Kotlin數(shù)據(jù)類
Kotlin lambda表達式
Kotlin是免費的嗎?
Kotlin包
使用Kotlin進行Android開發(fā)
在Java中調(diào)用Kotlin代碼
Kotlin this表達式
使用Kotlin進行JavaScript開發(fā)
Kotlin擴展
Kotlin解構(gòu)聲明
Kotlin注解
Kotlin使用Maven

Kotlin兼容性

本頁介紹 Kotlin 不同版本以及子系統(tǒng)的兼容性保證。

兼容性詞匯表

兼容性意味著回答這個問題:對于給定的兩個版本的 Kotlin(例如,1.2 和 1.1.5),為一個版本編寫的代碼可以與另一個版本一起使用嗎?下面的列表解釋了不同版本對的兼容模式。請注意,如果版本號較小(即使發(fā)布時間晚于版本號較大的版本)那么版本較舊。對于“舊版本”我們使用 OV,對于“新版本”使用 NV。

  • C——完全兼容(Full Compatibility)
    • 語言
      • 無語法改動(除去 bug*)
      • 可能添加或刪除新的警告/提示
    • API(kotlin-stdlib-*、 kotlin-reflect-*)
      • 無 API 改動
      • 可能添加/刪除帶有 WARNING 級的棄用項
    • 二進制(ABI)
      • 運行時:二進制可以互換使用
      • 編譯:二進制可以互換使用
  • BCLA——語言和 API 向后兼容(Backward Compatibility for the Language and API)
    • 語言
      • 可能會在 NV 中刪除 OV 中已棄用的語法
      • 除此之外,OV 中可編譯的所有代碼都可以在 NV 中編譯(除去 bug*)
      • 可能在 NV 中添加新語法
      • 在 NV 中可以提升 OV 的一些限制
      • 可能添加或刪除新的警告/提示
    • API(kotlin-stdlib-*、 kotlin-reflect-*)
      • 可能添加新的 API
      • 可能添加/刪除帶有 WARNING 級的棄用項
      • WARNING 級的棄用項可能在 NV 中提升到 ERROR 級或者 HIDDEN
  • BCB——二進制向后兼容(Backward Compatibility for Binaries)
    • 二進制(ABI)
      • 運行時:NV 的二進制可以在 OV 的二進制工作的任何地方使用
      • NV 編譯器:針對 OV 二進制編譯的代碼可針對 NV 二進制編譯
      • OV 編譯器可能不接受 NV 二進制(例如,展示較新語言特性或 API 的二進制)
  • BC——完全向后兼容(Full Backward Compatibility)
    • BC = BCLA & BCB
  • EXP——實驗性的功能(Experimental feature)
  • NO——無兼容性保證(No compatibility guarantees)
    • 我們會盡力提供順利的遷移,但不能給出任何保證
    • 為每個不兼容的子系統(tǒng)單獨規(guī)劃遷移

* 除去 bugs 無改動意味著如果發(fā)現(xiàn)一個重要的 bug(例如在編譯器診斷或其他地方),修復它可能會引入一個破壞性改動,但我們總是非常小心對待這樣的改動。

Kotlin 發(fā)行版的兼容性保證

JVM 平臺的 Kotlin

  • 補丁版本更新(例如1.1.X)完全兼容
  • 次版本更新(例如1.X)向后兼容
Kotlin 1.0 1.0.X 1.1 1.1.X 2.0
1.0 - C BC BC ?
1.0.X C - BC BC ?
1.1 BC BC - C ?
1.1.X BC BC C - ?
2.0 ? ? ? ? -

JS 平臺的 Kotlin:從 Kotlin 1.1 開始,補丁版本和次版本更新為語言和 API 提供向后兼容性(BCLA),但沒有 BCB。

Kotlin 1.0.X 1.1 1.1.X 2.0
1.0.X - EXP EXP EXP
1.1 EXP - BCLA ?
1.1.X EXP BCLA - ?
2.0 EXP ? ? -

Kotlin Scripts:補丁版本和次版本更新為語言和 API 提供向后兼容性(BCLA),但沒有 BCB。

跨平臺兼容性

Kotlin 可用于多個平臺(JVM/Android、JavaScript 以及即將推出的本地平臺)。每個平臺都有自己的特殊性(例如 JavaScript 沒有適當?shù)恼麛?shù)),因此我們必須相應地調(diào)整語言。我們的目標是提供合理的代碼可移植性,而不會犧牲太多。

每個平臺都可能具有特定的語言擴展(例如 JVM 的平臺類型和 JavaScript 的動態(tài)類型)或限制(例如 JVM 上與重載相關(guān)的限制),但核心語言保持不變。

標準庫提供了在所有平臺上可用的核心 API,我們努力使這些 API 在每個平臺上以相同的方式工作。除此之外,標準庫提供了平臺相關(guān)的擴展(例如,JVM 的java.io 或 JavaScript 的 js())以及一些可以統(tǒng)一調(diào)用但工作方式不同的 API(例如 JVM 和 JavaScript 的正則表達式)。

實驗性的功能

實驗性的功能,如 Kotlin 1.1 中的協(xié)程,可以從上面列出的兼容模式中豁免。這類功能需要選擇性加入(opt-in)來使用才沒有編譯器警告。實驗性的功能至少向后兼容補丁版本更新,但我們不保證任何次版本更新的兼容性(會盡可能提供遷移幫助)。

Kotlin 1.1 1.1.X 1.2 1.2.X
1.1 - BC NO NO
1.1.X BC - NO NO
1.2 NO NO - BC
1.2.X NO NO BC -

EAP 構(gòu)建版

我們發(fā)布早期訪問預覽(Early Access Preview,EAP)構(gòu)建版到特殊渠道,該社區(qū)的早期采用者可以試用它們并提供反饋。這樣的構(gòu)建不提供任何兼容性保證(盡管我們盡最大努力保持它們與發(fā)行版以及彼此之間的合理的兼容性)。這類構(gòu)建版的質(zhì)量預期也遠低于發(fā)行版。Beta 測試版本也屬于這一類別。

重要注意事項:通過 EAP 為 1.X(例如 1.1.0-eap-X)編譯的所有二進制文件會被編譯器發(fā)行版版本拒絕。我們不希望預發(fā)布版本編譯的任何代碼在穩(wěn)定版本發(fā)布后保留。這不涉及補丁版本的 EAP(例如 1.1.3-eap-X),這些 EAP 產(chǎn)生具有穩(wěn)定 ABI 的構(gòu)建。

兼容性模式

當一個大團隊遷移到一個新版本時,當一些開發(fā)人員已經(jīng)更新、而其他人沒有時,可能會在某個時候出現(xiàn)“不一致的狀態(tài)”。為了防止前者編寫和提交別人可能無法編譯的代碼,我們提供了以下命令行開關(guān)(在 IDE 以及 Gradle/Maven 中也可用):

  • -language-version X.Y——Kotlin 語言版本 X.Y 的兼容性模式,對其后出現(xiàn)的所有語言功能報告錯誤
  • -api-version X.Y——Kotlin API 版本 X.Y 的兼容性模式,對使用來自 Kotlin 標準庫(包括編譯器生成的代碼)的新版 API 的所有代碼報告錯誤。

二進制兼容性警告

如果使用 NV Kotlin 編譯器并在 classpath 中配有 OV 標準庫或 OV 反射庫,那么可能是項目配置錯誤的跡象。
為了防止編譯期或運行時出現(xiàn)意外問題,我們建議要么將依賴關(guān)系更新到 NV,要么明確指定 API 版本/語言版本參數(shù)。
否則編譯器會檢測到某些東西可能出錯,并報告警告。

例如,如果 OV = 1.0 且 NV = 1.1,你可能觀察到以下警告之一:

Runtime JAR files in the classpath have the version 1.0, which is older than the API version 1.1. 
Consider using the runtime of version 1.1, or pass '-api-version 1.0' explicitly to restrict the 
available APIs to the runtime of version 1.0.

這意味著你針對版本 1.0 的標準庫或反射庫使用 Kotlin 編譯器 1.1。這可以通過不同的方式處理:

  • 如果你打算使用 1.1 標準庫中的 API 或者依賴于這些 API 的語言特性,那么應將依賴關(guān)系升級到版本 1.1。
  • 如果你想保持你的代碼與 1.0 標準庫兼容,你可以傳參 -api-version 1.0。
  • 如果你剛剛升級到 kotlin 1.1,但不能使用新的語言功能(例如,因為你的一些隊友可能沒有升級),你可以傳參 -language-version 1.0,這會限制所有的 API 和語言功能到 1.0。
Runtime JAR files in the classpath should have the same version. These files were found in the classpath:
    kotlin-reflect.jar (version 1.0)
    kotlin-stdlib.jar (version 1.1)
Consider providing an explicit dependency on kotlin-reflect 1.1 to prevent strange errors
Some runtime JAR files in the classpath have an incompatible version. Consider removing them from the classpath

這意味著你對不同版本的庫有依賴性,例如 1.1 標準庫和 1.0 反射庫。為了防止在運行時出現(xiàn)微妙的錯誤,我們建議你使用所有 Kotlin 庫的相同版本。在本例中,請考慮對 1.1 反射庫添加顯式依賴關(guān)系。

Some JAR files in the classpath have the Kotlin Runtime library bundled into them. 
This may cause difficult to debug problems if there's a different version of the Kotlin Runtime library in the classpath. 
Consider removing these libraries from the classpath

這意味著在 classpath 中有一個庫,它不是作為 Gradle/Maven 依賴項而依賴 Kotlin 標準庫,而是與它分布在同一個構(gòu)件中(即是被捆綁的)。這樣的庫可能會導致問題,因為標準構(gòu)建工具不認為它是 Kotlin 標準庫的實例,因此它不受依賴版本解析機制的限制,你可以在 classpath 找到同一個庫的多個版本。請考慮聯(lián)系這樣的庫的作者,并提出使用 Gradle/Maven 依賴取代的建議。


上一篇:Kotlin教程下一篇:Kotlin可見性修飾符