众所周知,编程语言 在虚拟机将它们读入机器语言之前,虚拟机存在的语言就存在了,但是有一种中间语言“比实际开发人员编写的语言更接近机器语言”。
例如,在C#的情况下,当您用C#构建程序时,该C#被构建为C# IL代码,这既不是纯C也不是C#。
在Java的情况下,当使用Java构建应用程序时,将输出Java字节码中的结果。
回到主题,在Kotlin的情况下,之前理解为转换成Java,最后传递Java字节码给虚拟机(可能这是我误解的地方)
然而,在使用Jetpack Compose时提到的Kotlin IR的情况下,它被描述为直接从虚拟机读取的最终二进制文件(从名称来看类似于C#的IL)。
所以我想问的是
KotlinIR是一个可以直接由JVM读取和操作的二进制文件,而无需在编译阶段转换回Java吗?
2条答案
按热度按时间1hdlvixo1#
Kotlin代码在编译期间不会转换为Java。它会编译为Java字节码。Kotlin IR是编写的Kotlin代码和编译的Java字节码之间的中间表示,是编译期间使用的中间步骤。它不是编译代码的一部分。
JVM对Kotlin或Kotlin IR一无所知。
KotlinIR用于Kotlin的其他平台目标,除了JVM,也是一个中间步骤。
l3zydbqr2#
不,KotlinIR(中间表示)不是可以直接由JVM执行的二进制格式。它是Kotlin编译器用来生成可以由JVM执行的字节码的中间语言。Kotlin IR的目的是提供一个可以由多个后端使用的通用表示,包括JVM,LLVM和JavaScript。
当你编译一个Kotlin程序时,Kotlin编译器会生成Kotlin IR,然后由你选择的后端转换成字节码(在JVM的情况下,字节码是由JVM后端生成的)。字节码然后可以由JVM执行。
因此,简而言之,KotlinIR不是一种可以直接由JVM执行的二进制格式。相反,它是一种中间表示,由Kotlin编译器用于生成可以由JVM执行的字节码。