Kotlin 原生编译方案: Kotlin Native

Kotlin Native 是什么

简单来说,Kotlin Native 就是将 Kotlin 代码编译为不依靠运行时(例如 JVM)的原生程序的一种官方方案。它使用了 LLVM 作为编译器后端,支持多种硬件架构和多个平台的交叉编译。不得不提一下,JVM 平台的兄弟语言之一的 Scala 可能是这个项目的前车之鉴,也就是 Scala Native 的诞生。所以 Kotlin Native 会出现,也许没那么惊奇了。

如果你只是一个前端,不了解那些东西。第一想法肯定就会以为是类似于 React Native 之类的东西?再仔细想想发现不对了吗?它们严格上来讲并不是一类命名。因为换做一路的命名应该是 “JavaScript Native” ,是 JavaScript 这门语言,而不是 React 这个框架。
不过从 Native 这个方面来讲的话… 它们也算有点交集。React Native 是将 React 组件渲染成平台原生控件,而 Kotlin Native 是将 Kotlin 代码编译为原生代码。

KN 脱离 JVM 的优势很明显:可以支持到无 JVM 的平台(例如 IOS 和嵌入式设备)、无需附带额外运行时以及比 JNI 更加方便得多的本地接口调用。但是同时也宣布放弃了庞大的 Java 生态(类库),不然就类似于 JVM AOT 了。作为最大卖点 100% Java 互操作性的 Kotlin 语言,注定了 Kotlin Native 只会用在小众领域,甚至可能是一个会死去的实验项目。

不管 Kotlin Native 以后会如何,官方对它的还是很有计划的:

  • iOS应用程序(与 Android 代码重用)
  • 嵌入式系统/物联网(例如 Arduino)
  • 数据分析和科学计算
  • 服务器端和微服务(利用协程的威力,低成本的执行)
  • 游戏开发

至少官方对它的期待或者说整个 Kotlin 生态的期待是很高的,很有野心。绝不满足于依赖 JVM 的现状。

安装 Kotlin Native

  1. 在项目的 release 页面(目前只发布出一个版本):https://github.com/JetBrains/kotlin-native/releases 下载压缩包。
  2. 将 bin 目录加入环境变量。
  3. 执行 kotlinc 命令,等待依赖下载完成。

依赖下载完成以后,工具链就可以直接使用了,我们创建 hello.kt 文件:

fun main(args: Array<String>) {
    println("Hello World!")
}

使用 kotlinc 编译器:

kotlinc hello.kt -o hello -opt

-opt 参数表示启用编译优化,-o 就不用多解释了:输出文件路径,几乎是编译器通用的参数。如果你注意的话,会发现这个 hello.kt 并没有包名。没错,main 函数所在的文件不能有包名。

编译后的 hello 文件在我这边 800KB+ ,大小还是挺能接受的。

与 Gradle 集成

待更。