Ale*_*sso 4 compilation kotlin kotlin-native kotlin-js
我正在尝试理解Kotlin源代码在编译时经历的旅程.文件说明
当针对JVM时,Kotlin生成Java兼容的字节码.当针对JavaScript时,Kotlin会转向ES5.1并生成与包括AMD和CommonJS在内的模块系统兼容的代码.当定位本机时,Kotlin将生成特定于平台的代码(通过LLVM).
我的理解是,当Kotlin瞄准JVM时,代码被编译/转换为字节码,然后JVM将其解释为机器代码.这是JIT(及时)编译的一个例子吗?
当定位javascript时,使用单词"transpiles".编译到底的代码究竟是什么,并且在任何步骤中进一步解释或编译?
当定位本机时,代码是直接编译到机器代码吗?LLVM采取了哪些步骤?
最后,这是否意味着Kotlin既是编译语言又是解释语言?
hot*_*key 11
<...>将代码编译/转换为字节码,然后JVM将其解释为(机器代码).这是JIT(及时)编译的一个例子吗?
是的,当针对JVM时,Kotlin被编译为JVM *.class文件,这是一种字节码格式,以后可以由JVM解释,也可以在程序运行期间由JVM编译为机器代码,或者甚至是在前面编译-of-time(AOT)到机器代码.在这里,Kotlin编译器不需要知道如何使用字节码.
当定位javascript时,使用单词"transpiles".编译到底的代码究竟是什么,并且在任何步骤中进一步解释或编译?
Kotlin/JS的目标格式是JavaScript源代码.您可以尝试构建任何Kotlin/JS示例,并检查*.js包含Kotlin代码转换为的JS源代码的输出文件.我相信在这里使用transpile(translate + compile)这个词来强调目标格式是源代码而不是二进制,而编译器仍然执行大量的转换和优化.
JavaScript源代码也可以解释或JIT编译,这取决于用于运行程序的JavaScript引擎.
当定位本机时,代码是直接编译到机器代码吗?LLVM采取了哪些步骤?
Kotlin/Native有两种可能的目标形式:
*.klib可以在另一个科特林/本地项目被重用库.这是一个ZIP存档,包含LLVM bitcode以及一些特定于Kotlin的元数据.lld来链接LLVM bitcode中的二进制文件.| 归档时间: |
|
| 查看次数: |
1366 次 |
| 最近记录: |