Kotlin JVM 和 Kotlin Native 有啥区别?

Posted

技术标签:

【中文标题】Kotlin JVM 和 Kotlin Native 有啥区别?【英文标题】:What's the difference between Kotlin JVM and Kotlin Native?Kotlin JVM 和 Kotlin Native 有什么区别? 【发布时间】:2019-08-19 19:21:35 【问题描述】:

所以我知道 Kotlin Native 显然是 Native 而 Kotlin JVM 不是,而是 Kotlin JVM 和 Kotlin Native 之间的代码: 1.不同的编译器和不同的代码 2.不同的编译器和类似的代码 3.不同的编译器和相同的代码 4.以上都不是(请说明)

【问题讨论】:

【参考方案1】:

Kotlin/JVM 和 Kotlin/Native 编译器共享前端(执行代码解析、名称解析、类型推断等的部分),但编译器后端将内部程序表示转换为目标代码(分别是 JVM 字节码和 LLVM 位码)是不同的。

两种编译器接受的 Kotlin 语言是相同的,但某些功能和检查是特定于平台的。此外,Kotlin/JVM 和 Kotlin/Native 的标准库有很大不同,请在此处查看每个平台上可用的 API:Kotlin Standard Library。

另一个很大的区别是内存模型:Kotlin/JVM 使用 Java 内存模型,而 Kotlin/Native 提供its own concurrency and memory model。

此外,在 Kotlin/JVM 和 Kotlin/Native 项目中可以使用的依赖项是不同的。除了使用相同 Kotlin 目标构建的项目:

Kotlin/JVM 还可以使用为 JVM 构建的任何库(用 Java、Scala 等编写)

Kotlin/Native 还可以使用 C interop tools 与用 C(或至少具有 C 标头)编写的本机库进行互操作。

Kotlin/JVM 和 Kotlin/Native 都可以使用 Kotlin 多平台库。鉴于依赖项是一个多平台库,因此可以在 Kotlin/JVM 和 Kotlin/Native 之间完全重用使用它的代码。

【讨论】:

语法有区别吗?在 Kotlin 项目中可以使用哪一个来编写 Java 代码?我怎么知道我的项目是 Kotlin/JVM 还是 Kotlin/Native?

以上是关于Kotlin JVM 和 Kotlin Native 有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

Kotlin 1.0正式发布:JVM和Android上更好用的语言

为啥 Kotlin 多平台项目的 commonMain 可以访问 kotlin.jvm 包?

在 Kotlin 1.3 多平台 gradle 项目中参考来自 kotlin-jvm 的 kotlin-js 资源

无法解析 org.jetbrains:kotlin-css-jvm:1.0.0-pre.31-kotlin-1.2.41

kotlin 字段 foo 和 isFoo 冲突:以下声明具有相同的 JVM 签名

如何在 Android 和 JVM 目标之间共享 Java 代码(使用 Kotlin Multiplatform)?