Kotlin/Native 技術(shù)預(yù)告版:不使用虛擬機(jī)的 Kotlin
我們很高興發(fā)布 Kotlin/Native 的第一個技術(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 編寫每一個組件成為可能,從服務(wù)器后端程序到 web 應(yīng)用或者移動客戶端。共享技能集是整個計(jì)劃的重要動機(jī)之一。另一個是共享真實(shí)代碼。
我們跨平臺代碼重用的愿景這樣的:你可以使用 Kotlin 以平臺獨(dú)立的方式編寫整個模塊,然后將它們編譯成任何支持的平臺(目前支持的平臺有 Kotlin/JVM, Kotlin/JS 和即將出來的 Kotlin/Native)。我們將這些稱為通用模塊。通用模塊的一部分可能需要平臺相關(guān)的實(shí)現(xiàn),這一部分可以為單獨(dú)為每一個平臺開發(fā)。通用模塊為客戶端提供通用接口,但是其他的模塊(平臺相關(guān))可以擴(kuò)展這些接口來提供一些平臺專有的能力。
注意我們不想專門使 Kotlin/JVM 程序在 Kotlin/Native 或者 Kotlin/JS 上運(yùn)行。因?yàn)槟菢酉喈?dāng)于實(shí)現(xiàn)另外一個 JVM,這有很多工作同時對運(yùn)行時也意味著很多限制。我們以另外一種方式實(shí)現(xiàn):為所有平臺提供一種通用語言,同時允許通過和平臺語言之間的無縫交互創(chuàng)建通用庫。
技術(shù)
Kotlin/Native 使用 LLVM 編譯器來生成機(jī)器碼。在該預(yù)告版本中,我們支持以下目標(biāo)平臺:
- Mac OS X 10.10 及以后的版本(x86-64)
- x86-64 Ubuntu Linux(14.04, 16.04及以后的版本),其他的 Linux 發(fā)行版本也許也可以
- Apple iOS(arm64),在 MacOS X 宿主上編譯
- 樹莓派,在 Linux 宿主上編譯
更多的平臺可以相對容易的添加進(jìn)來,只要 LLVM 對它們支持。以后我們也許會支持更多的平臺開箱即用。
通常,內(nèi)部交互是我們的第一優(yōu)先級,所以 Kotlin/Native 可以高效的調(diào)用 C 語言函數(shù),并且向他們傳遞數(shù)據(jù)或者從它們那里讀取數(shù)據(jù)。你可以在編譯時通過一個 C 頭文件生成 Kotlin bindings, 也可以快速安全訪問目標(biāo)平臺的任何 native 接口。詳細(xì)的使用說明參考這里
內(nèi)存管理
Kotlin/Native 的設(shè)計(jì)潛在允許不同的平臺使用不同的內(nèi)存管理方案。例如,未來在服務(wù)器以及桌面平臺上使用跟蹤式的 GC 也許是有意義的,同時在 iOS 上使用 ARC 也許更有意義。有的平臺也許僅僅需要手動管理內(nèi)存,結(jié)果將使用一個甚至更小的 Kotlin/Native 運(yùn)行時。
這個技術(shù)預(yù)覽版本通過一個頂層的循環(huán)搜集器實(shí)現(xiàn)自動引用計(jì)數(shù),但是現(xiàn)在還不知道最終的內(nèi)存管理方案會是什么樣子。
目前的局限
如上所述,Kotlin/Native 還非常不完整,所以這個技術(shù)預(yù)覽版存在一些局限,這些局限在后續(xù)會消除:
- 還沒有做任何性能優(yōu)化,所以現(xiàn)在用標(biāo)準(zhǔn)去衡量 Kotlin/Native 沒有任何意義
- 標(biāo)準(zhǔn)庫和反射支持還非常不完整,后續(xù)會添加更多接口。
- 更多信息參考 Release Notes
未來計(jì)劃
我們現(xiàn)在在開發(fā) Kotlin/Native 的核心技術(shù),這些技術(shù)對所有的目標(biāo)平臺都是一樣的(編譯器、核心運(yùn)行時和庫)。作為未來可能的工作,我們在考慮以下可能的用例:
- iOS應(yīng)用(復(fù)用 Android 的代碼)
- 嵌入式系統(tǒng)/物聯(lián)網(wǎng)(例如:Ardunio 和 beyond)
- 數(shù)據(jù)分析和科學(xué)計(jì)算
- 服務(wù)端微服務(wù)
- 游戲開發(fā)
How to try
我們已經(jīng)為 Mac 和 iOS 平臺 以及 Linux 和 樹莓派 準(zhǔn)備了壓縮包,包含編譯器、示例和文檔。
更多說明請查閱 Github 項(xiàng)目和 Release Notes