【发布时间】:2020-01-12 07:01:00
【问题描述】:
官方的 Kotlin/Native documentation 声明 Kotlin/Native
.. 是基于 LLVM 的 Kotlin 编译器后端。
据我所知:
- Kotlin 编译器 (kotlinc) 从您的 Kotlin 源文件生成 .class 文件(带有 Java 字节码)。
- 通用 LLVM 后端(与 Kotlin 无关)采用 LLVM IR 并将其转换为二进制代码。
因此,Kotlin/Native 是否将 Java 字节码转换为 LLVM IR? 如果是这样,说明 Kotlin/Native 是 LLVM 后端是否正确? Kotlin 代码是否被编译到 LLVM IR 中? 如果不是,每个编译步骤的输入和输出是什么? (例如:Kotlin -(kotlinc)-> Java 字节码 -(LLVM 后端-> 本机二进制文件)
This 博客文章指出 Kotlin 前端编译器(我认为它指的是 kotlinc)产生 Kotlin IR,我从未读过。
Kotlin 编译器有一个前端,但有多个后端,具体取决于您用于构建代码的插件。 Kotlin/Native 插件将 Kotlin 中间表示 (IR) 转换为本机代码(即机器可执行的代码)。
这句话对吗?
它告诉你,Java 字节码、本机代码和 JavaScript 的编译过程是相同的。你编译你的 Kotlin 代码,然后你有 3 个后端编译器来提供预期的输出格式(Java 字节码、JavaScript、二进制代码)。
最终的平台特定二进制文件是否包含原生 Kotlin 标准库,还是动态链接?
【问题讨论】:
标签: kotlin kotlin-native