Kotlin代码是如何编译成本机代码的?
官方Kotlin/Native声明Kotlin/Native 。。是Kotlin编译器的基于LLVM的后端 据我所知:Kotlin代码是如何编译成本机代码的?,kotlin,kotlin-native,Kotlin,Kotlin Native,官方Kotlin/Native声明Kotlin/Native 。。是Kotlin编译器的基于LLVM的后端 据我所知: Kotlin编译器(kotlinc)从Kotlin源文件生成.class文件(带有Java字节码) 通用LLVM后端(与Kotlin无关)采用LLVM IR并将其转换为二进制代码 因此,Kotlin/Native是否正在将Java字节码转换为LLVM IR? 如果是,那么说明Kotlin/Native是LLVM后端是否正确?Kotlin代码是否编译成LLVM IR? 如果不
- Kotlin编译器(kotlinc)从Kotlin源文件生成.class文件(带有Java字节码)李>
- 通用LLVM后端(与Kotlin无关)采用LLVM IR并将其转换为二进制代码
*.klib
因此,Kotlin/Native不以任何方式处理JVM字节码
中间表示是Kotlin编译器的一个实现细节,除Kotlin编译器本身外,其他任何使用者都不使用它,因此开发人员不应该关心它。对于JVM,它甚至保存在内存中,从不写入二进制文件。对于Kotlin/Native,它实际上是序列化并写入*.klib
重复使用
它告诉您Java字节码、本机代码和JavaScript的编译过程是相同的。您编译Kotlin代码,然后有3个后端编译器提供预期的输出格式(Java字节码、JavaScript、二进制代码)
实际上,编译过程的一部分是相同的,即前端语言分析,其中包括解析、调用解析、类型推断、诊断和其他不需要任何特定于平台的代码转换的步骤。即使如此,前端部分也针对每个平台进行了调整,因为这些平台允许不同的sets提供语言功能,并提供不同的诊断集
最后一个问题是,最终的特定于平台的二进制文件是否包含本机Kotlin标准库?还是动态链接
目前,标准库静态链接到生成的Kotlin/本机二进制文件中。如果我理解正确,那么基本上是这样,即使前端编译器在3个编译目标(JVM、JS和本机)中非常相似,并不是只有一个工具可以将Kotlin转换为IR,对吗?每个编译目标都有自己的前端编译器,但如果代码相同,则其特定前端进程的输出将产生相同的IR?那么klib中的IR是LLVM IR或Kotlin特定的IR?对于JVM,编译过程非常清楚:kotlinc do我想Kotlin/JS和kotlin2js都是一样的。但是kotlinc在里面做什么?它的步骤是什么?Kotlin/Native的前端和后端编译器是什么?