根據(jù)JetBrains技術(shù)主管Nikolay Igotti的介紹,Kotlin/Native 0.4已經(jīng)可用于為iOS和macOS開發(fā)原生應(yīng)用。此外該版本還為WebAssembly平臺提供了實(shí)驗(yàn)性支持。
Kotlin/Native對iOS/macOS開發(fā)的支持,關(guān)鍵在于實(shí)現(xiàn)了與Objective-C的互操作性。JetBrains目前已經(jīng)發(fā)布了一個(gè)非常簡單的演示應(yīng)用,該應(yīng)用使用Kotlin編寫,已發(fā)布至Apple Store和Google Play。
下列代碼片段展示了訪問iOS框架的方式:
import kotlinx.cinterop.*import platform.Foundation.*import platform.objc.*import platform.osx.*fun readResource(resourceName: String): ByteArray { val filePath = NSBundle.mainBundle.pathForResource(resourceName, ofType = null) val fileData = NSData.dataWithContentsOfFile(filePath!!) ?: throw Error("failed reading resource $resourceName") return fileData.bytes!!.readBytes(fileData.length.toInt())}這一切都是通過新的platform實(shí)現(xiàn)的,并通過庫實(shí)現(xiàn)了對底層操作系統(tǒng)接口的訪問。借此便可以使用提供了POSIX OS層的平臺執(zhí)行各類操作,如調(diào)用fopen、fread等。以前與底層平臺的互操作則需要專門生成的Interop Stub。
新版的另一個(gè)新功能對象固定(Object pinning),主要是為了簡化通過C API使用Kotlin對象的方式,借此可以確保通過C API消費(fèi)的對象能夠鎖定到內(nèi)存中。
Kotlin/Native現(xiàn)已開始支持WebAssembly,因此可以通過Kotlin開發(fā)基于瀏覽器的應(yīng)用。但根據(jù)Igotti的介紹,由于瀏覽器支持方面的局限,這種支持目前依然是實(shí)驗(yàn)性質(zhì)的。
在工具方面,調(diào)試功能現(xiàn)已支持在運(yùn)行時(shí)檢查大部分變量。此外同樣重要的是,還通過一個(gè)新的插件讓CLion可以支持Kotlin/Native。
Kotlin/Native是Kotlin的最新成果,可用于將最初僅僅基于JVM的語言Kotlin編譯為無需虛擬機(jī)即可運(yùn)行的原生庫。因此該技術(shù)非常適合諸如iOS等平臺以及嵌入式設(shè)備等不能或者無法運(yùn)行虛擬機(jī)的環(huán)境。Kotlin/Native目前已經(jīng)可以支持Windows、Linux、macOS、iOS、Android和WebAssembly。
閱讀英文原文:Kotlin Native Adds Objective-C Interop, WebAssembly Support