@liuhui0803
2017-11-29T10:38:45.000000Z
字数 1402
阅读 1985
开发
Java
Kotlin
原生应用
WebAssembly
摘要:
根据JetBrains技术主管Nikolay Igotti的介绍,Kotlin/Native 0.4已经可用于为iOS和macOS开发原生应用。此外该版本还为WebAssembly平台提供了实验性支持。
正文:
根据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。
作者:Sergio De Simone,阅读英文原文:Kotlin Native Adds Objective-C Interop, WebAssembly Support