根据 JetBrains 技术主管 Nikolay Igotti 的介绍, Kotlin/Native 0.4 已经可用于为 iOS 和 macOS 开发原生应用。此外该版本还为 WebAssembly 平台提供了实验性支持。
Kotlin/Native 对 iOS/macOS 开发的支持,关键在于实现了与 Objective-C 的互操作性。JetBrains 目前已经发布了一个非常简单的演示应用,该应用使用Kotlin 编写,已发布至 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
实现的,并通过库实现了对底层操作系统接口的访问。借此便可以使用提供了 POSIX OS 层的平台执行各类操作,如调用fopen
、fread
等。以前与底层平台的互操作则需要专门生成的 Interop Stub。
新版的另一个新功能对象固定(Object pinning),主要是为了简化通过C API 使用Kotlin 对象的方式,借此可以确保通过C API 消费的对象能够锁定到内存中。
Kotlin/Native 现已开始支持 WebAssembly ,因此可以通过 Kotlin 开发基于浏览器的应用。但根据 Igotti 的介绍,由于浏览器支持方面的局限,这种支持目前依然是实验性质的。
在工具方面,调试功能现已支持在运行时检查大部分变量。此外同样重要的是,还通过一个新的插件让CLion 可以支持Kotlin/Native 。
Kotlin/Native 是 Kotlin 的最新成果,可用于将最初仅仅基于 JVM 的语言 Kotlin 编译为无需虚拟机即可运行的原生库。因此该技术非常适合诸如 iOS 等平台以及嵌入式设备等不能或者无法运行虚拟机的环境。Kotlin/Native 目前已经可以支持 Windows、Linux、macOS、iOS、Android 和 WebAssembly。
阅读英文原文: Kotlin Native Adds Objective-C Interop, WebAssembly Support
评论