不使用虛擬機(jī)的 Kotlin

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

本文譯自 Kotlin/Native Tech Preview: Kotlin without a VM

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末炬守,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子剂跟,更是在濱河造成了極大的恐慌减途,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,406評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件曹洽,死亡現(xiàn)場(chǎng)離奇詭異鳍置,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)送淆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門税产,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人偷崩,你說(shuō)我怎么就攤上這事辟拷。” “怎么了阐斜?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,711評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵衫冻,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我谒出,道長(zhǎng)羽杰,這世上最難降的妖魔是什么渡紫? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,380評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮考赛,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘莉测。我一直安慰自己颜骤,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布捣卤。 她就那樣靜靜地躺著忍抽,像睡著了一般。 火紅的嫁衣襯著肌膚如雪董朝。 梳的紋絲不亂的頭發(fā)上鸠项,一...
    開(kāi)封第一講書(shū)人閱讀 51,301評(píng)論 1 301
  • 那天,我揣著相機(jī)與錄音子姜,去河邊找鬼祟绊。 笑死,一個(gè)胖子當(dāng)著我的面吹牛哥捕,可吹牛的內(nèi)容都是我干的牧抽。 我是一名探鬼主播,決...
    沈念sama閱讀 40,145評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼遥赚,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼扬舒!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起凫佛,我...
    開(kāi)封第一講書(shū)人閱讀 39,008評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤讲坎,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后愧薛,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體晨炕,經(jīng)...
    沈念sama閱讀 45,443評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評(píng)論 3 334
  • 正文 我和宋清朗相戀三年厚满,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了府瞄。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,795評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡碘箍,死狀恐怖遵馆,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情丰榴,我是刑警寧澤货邓,帶...
    沈念sama閱讀 35,501評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站四濒,受9級(jí)特大地震影響换况,放射性物質(zhì)發(fā)生泄漏职辨。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評(píng)論 3 328
  • 文/蒙蒙 一戈二、第九天 我趴在偏房一處隱蔽的房頂上張望舒裤。 院中可真熱鬧,春花似錦觉吭、人聲如沸腾供。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,731評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)伴鳖。三九已至,卻和暖如春徙硅,著一層夾襖步出監(jiān)牢的瞬間榜聂,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,865評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工嗓蘑, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留须肆,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,899評(píng)論 2 370
  • 正文 我出身青樓脐往,卻偏偏與公主長(zhǎng)得像休吠,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子业簿,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,107評(píng)論 25 707
  • 前言 人生苦多瘤礁,快來(lái) Kotlin ,快速學(xué)習(xí)Kotlin梅尤! 什么是Kotlin柜思? Kotlin 是種靜態(tài)類型編程...
    任半生囂狂閱讀 26,209評(píng)論 9 118
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)巷燥,斷路器赡盘,智...
    卡卡羅2017閱讀 134,654評(píng)論 18 139
  • 沒(méi)陨享!錯(cuò)! 談戀愛(ài)時(shí)钝腺,2個(gè)人合不合適抛姑,旅一次行就知道了。 因?yàn)槁眯醒藓菣z驗(yàn)愛(ài)情的最好標(biāo)準(zhǔn)定硝。 《圍城》中,錢鐘書(shū)先生借...
    追劇汪老妖七閱讀 1,398評(píng)論 1 10
  • 從小媽媽就告訴我毫目,唯有靠自己的雙手去努力奮斗才會(huì)過(guò)得更好蔬啡。腳踏實(shí)地一步一個(gè)腳印走出來(lái)的路才是真正屬于自己的诲侮,那些投...
    六月同學(xué)閱讀 1,090評(píng)論 0 1