编译器是一种软件程序,它可以将人类程序员编写的计算机编程代码转换为特定CPU可以理解和执行的二进制代码(机器代码)。将源代码转换为机器码的行为称为“编译”。当所有代码在到达运行它的平台之前一次性转换时,这个过程称为预先编译(AOT)。
哪些编程语言使用AOT编译器?
许多著名的编程语言都需要编译器,包括:
Fortran
Pascal
Assembly Language
C
C++
Swift
在Java和c#之前,所有的计算机程序都是编译型或解释型程序。
解释型代码
解释型代码执行程序中的指令,而不将它们编译成机器语言。解释的代码直接解析源代码,与虚拟机配对,在执行时为机器翻译代码,或利用预编译的代码。Javascript通常是解释性的。
编译后的代码比解释后的代码运行得更快,因为它在执行操作时不需要做任何工作。工作已经完成了。
哪种编程语言使用JIT编译器?
Java和c#使用即时编译器。即时编译器是AOT编译器和解释器的结合。在编写Java程序之后,JIT编译器将代码转换为字节码,而不是包含针对特定硬件平台处理器的指令的代码。字节码是平台无关的,可以在任何支持Java的平台上发送和运行。从某种意义上说,程序的编译分为两个阶段。
类似地,c#使用JIT编译器,它是公共语言运行时的一部分,管理所有. net应用程序的执行。每个目标平台都有一个JIT编译器。只要中间字节码语言转换能被平台理解,程序就能运行。
AOT和JIT编译的优缺点
提前编译(AOT)可以缩短启动时间,尤其是当大部分代码在启动时执行时。但是,它需要更多的内存和磁盘空间。JOT编译必须针对所有可能的执行平台中性能最差的平台。
即时编译(JIT)在运行时对目标平台进行分析,并在运行时重新编译,以提供更好的性能。JIT生成改进的代码,因为它针对当前平台,尽管它通常比AOT编译的代码花费更多的时间运行。