Kotlin/Native 技術(shù)預(yù)告版:不使用虛擬機(jī)的 Kotlin
我們很高興發(fā)布 Kotlin/Native 的第一個(gè)技術(shù)預(yù)告版,它直接將 Kotlin 編譯成機(jī)器碼殊者。Kotlin/Native 編譯器將編譯出不依賴于任何虛擬機(jī)運(yùn)行的可執(zhí)行程序究流。
現(xiàn)在還不是完整的功能發(fā)布闲孤,但是你現(xiàn)在已經(jīng)可以使用這一技術(shù)并且在這里閱讀它的源碼葛躏。編譯器可在Apache 2 OSS 許可證下使用温治。
任務(wù)
Kotlin/Native 是使現(xiàn)代應(yīng)用隨處可以使用 Kotlin 的另外一步养铸。最終雁芙,使用 Kotlin 編寫(xiě)每一個(gè)組件成為可能,從服務(wù)器后端程序到 web 應(yīng)用或者移動(dòng)客戶端钞螟。共享技能集是整個(gè)計(jì)劃的重要?jiǎng)訖C(jī)之一兔甘。另一個(gè)是共享真實(shí)代碼。
我們跨平臺(tái)代碼重用的愿景這樣的:你可以使用 Kotlin 以平臺(tái)獨(dú)立的方式編寫(xiě)整個(gè)模塊鳞滨,然后將它們編譯成任何支持的平臺(tái)(目前支持的平臺(tái)有 Kotlin/JVM, Kotlin/JS 和即將出來(lái)的 Kotlin/Native)洞焙。我們將這些稱為通用模塊。通用模塊的一部分可能需要平臺(tái)相關(guān)的實(shí)現(xiàn)拯啦,這一部分可以為單獨(dú)為每一個(gè)平臺(tái)開(kāi)發(fā)澡匪。通用模塊為客戶端提供通用接口,但是其他的模塊(平臺(tái)相關(guān))可以擴(kuò)展這些接口來(lái)提供一些平臺(tái)專有的能力褒链。
注意我們不想專門使 Kotlin/JVM 程序在 Kotlin/Native 或者 Kotlin/JS 上運(yùn)行唁情。因?yàn)槟菢酉喈?dāng)于實(shí)現(xiàn)另外一個(gè) JVM,這有很多工作同時(shí)對(duì)運(yùn)行時(shí)也意味著很多限制碱蒙。我們以另外一種方式實(shí)現(xiàn):為所有平臺(tái)提供一種通用語(yǔ)言荠瘪,同時(shí)允許通過(guò)和平臺(tái)語(yǔ)言之間的無(wú)縫交互創(chuàng)建通用庫(kù)。
技術(shù)
Kotlin/Native 使用 LLVM 編譯器來(lái)生成機(jī)器碼赛惩。在該預(yù)告版本中哀墓,我們支持以下目標(biāo)平臺(tái):
- Mac OS X 10.10 及以后的版本(x86-64)
- x86-64 Ubuntu Linux(14.04, 16.04及以后的版本),其他的 Linux 發(fā)行版本也許也可以
- Apple iOS(arm64)喷兼,在 MacOS X 宿主上編譯
- 樹(shù)莓派篮绰,在 Linux 宿主上編譯
更多的平臺(tái)可以相對(duì)容易的添加進(jìn)來(lái),只要 LLVM 對(duì)它們支持季惯。以后我們也許會(huì)支持更多的平臺(tái)開(kāi)箱即用吠各。
通常,內(nèi)部交互是我們的第一優(yōu)先級(jí)勉抓,所以 Kotlin/Native 可以高效的調(diào)用 C 語(yǔ)言函數(shù)贾漏,并且向他們傳遞數(shù)據(jù)或者從它們那里讀取數(shù)據(jù)。你可以在編譯時(shí)通過(guò)一個(gè) C 頭文件生成 Kotlin bindings藕筋, 也可以快速安全訪問(wèn)目標(biāo)平臺(tái)的任何 native 接口纵散。詳細(xì)的使用說(shuō)明參考這里
內(nèi)存管理
Kotlin/Native 的設(shè)計(jì)潛在允許不同的平臺(tái)使用不同的內(nèi)存管理方案。例如,未來(lái)在服務(wù)器以及桌面平臺(tái)上使用跟蹤式的 GC 也許是有意義的伍掀,同時(shí)在 iOS 上使用 ARC 也許更有意義掰茶。有的平臺(tái)也許僅僅需要手動(dòng)管理內(nèi)存,結(jié)果將使用一個(gè)甚至更小的 Kotlin/Native 運(yùn)行時(shí)蜜笤。
這個(gè)技術(shù)預(yù)覽版本通過(guò)一個(gè)頂層的循環(huán)搜集器實(shí)現(xiàn)自動(dòng)引用計(jì)數(shù)濒蒋,但是現(xiàn)在還不知道最終的內(nèi)存管理方案會(huì)是什么樣子。
目前的局限
如上所述把兔,Kotlin/Native 還非常不完整沪伙,所以這個(gè)技術(shù)預(yù)覽版存在一些局限,這些局限在后續(xù)會(huì)消除:
- 還沒(méi)有做任何性能優(yōu)化垛贤,所以現(xiàn)在用標(biāo)準(zhǔn)去衡量 Kotlin/Native 沒(méi)有任何意義
- 標(biāo)準(zhǔn)庫(kù)和反射支持還非常不完整焰坪,后續(xù)會(huì)添加更多接口。
- 更多信息參考 Release Notes
未來(lái)計(jì)劃
我們現(xiàn)在在開(kāi)發(fā) Kotlin/Native 的核心技術(shù)聘惦,這些技術(shù)對(duì)所有的目標(biāo)平臺(tái)都是一樣的(編譯器某饰、核心運(yùn)行時(shí)和庫(kù))。作為未來(lái)可能的工作善绎,我們?cè)诳紤]以下可能的用例:
- iOS應(yīng)用(復(fù)用 Android 的代碼)
- 嵌入式系統(tǒng)/物聯(lián)網(wǎng)(例如:Ardunio 和 beyond)
- 數(shù)據(jù)分析和科學(xué)計(jì)算
- 服務(wù)端微服務(wù)
- 游戲開(kāi)發(fā)
How to try
我們已經(jīng)為 Mac 和 iOS 平臺(tái) 以及 Linux 和 樹(shù)莓派 準(zhǔn)備了壓縮包黔漂,包含編譯器、示例和文檔禀酱。
更多說(shuō)明請(qǐng)查閱 Github 項(xiàng)目和 Release Notes