Kotlin JVM和Kotlin Native有什么区别?

21

我知道 Kotlin Native 显然是本地的,而 Kotlin JVM 则不是,但是 Kotlin JVM 和 Kotlin Native 之间的代码是: 1. 不同的编译器和不同的代码 2. 不同的编译器和相似的代码 3. 不同的编译器和相同的代码 4. 以上都不是(请解释)

1个回答

28
Kotlin/JVM和Kotlin/Native编译器共享前端部分(执行代码解析、名称解析、类型推断等),但将内部程序表示转换为目标代码的编译器后端(分别为JVM字节码和LLVM位码)不同。两个编译器接受的Kotlin语言相同,但某些特性和检查是特定于平台的。此外,Kotlin/JVM和Kotlin/Native的标准库差异很大,请参见每个平台上可用的API: Kotlin Standard Library。另一个重要区别是内存模型:Kotlin/JVM使用Java内存模型,而Kotlin/Native提供自己的并发和内存模型。此外,Kotlin/JVM和Kotlin/Native项目中可以使用的依赖项也不同。除了使用相同Kotlin目标构建的项目之外: Kotlin/JVM还可以使用为JVM构建的任何库(如Java、Scala等编写的库); Kotlin/Native还可以使用C互操作工具与使用C编写的本地库(或至少具有C头文件)进行交互操作。Kotlin/JVM和Kotlin/Native都可以使用Kotlin Multiplatform库。如果依赖项是多平台库,则可以在Kotlin/JVM和Kotlin/Native之间完全重用处理它的代码。

2
有语法上的区别吗?哪一个可以在 Kotlin 项目中编写 Java 代码?我如何知道我的项目是 Kotlin/JVM 还是 Kotlin/Native? - shn
Android Studio的默认项目是Kotlin/JVM吗?它可以是Kotlin/Native吗? - Hamid Z
1
是的,使用 Kotlin 的 Android 项目通常是 Kotlin/JVM。Kotlin 代码首先被编译为 JVM 字节码,然后作为 AAR(Android 库归档)的一部分分发为 JVM 类文件。我认为没有针对 Android 的 Kotlin/Native 项目模板,但您可以使用 Kotlin Multiplatform 手动设置它。NDK 的正确目标应该是 androidNativeArm64androidNativeX64androidNativeArm32androidNativeX86。请注意,Kotlin/Native Android 代码不能使用正常的 Android SDK,实际上是使用 Android NDK 构建的。 - hotkey

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接