Compiler construction 像回忆录一样的即时编辑?

Compiler construction 像回忆录一样的即时编辑?,compiler-construction,jit,memoization,Compiler Construction,Jit,Memoization,我试图理解即时编译/解释,以及即时编译的负责人?我说《及时》有点像回忆录,对吗?因为它重用了它识别为重复的部分的“解决方案”,即机器或字节码 不,那是不对的 让我们看看这些工具在您向它们抛出字节码时会做什么。(非常简单地说) 口译译员 解释器查看字节码,找出他必须执行的操作,然后转到下一个字节码。这非常简单,并且都发生在运行时 AOT编译器 当人们谈论编译器时,通常会提到AOT编译器。当你编译时,他会查看你给他的字节码,并找出他必须生成的国家代码(汇编程序)。因此,当您运行这个nativ代码时,

我试图理解即时编译/解释,以及即时编译的负责人?我说《及时》有点像回忆录,对吗?因为它重用了它识别为重复的部分的“解决方案”,即机器或字节码

不,那是不对的

让我们看看这些工具在您向它们抛出字节码时会做什么。(非常简单地说)

口译译员 解释器查看字节码,找出他必须执行的操作,然后转到下一个字节码。这非常简单,并且都发生在运行时

AOT编译器 当人们谈论编译器时,通常会提到AOT编译器。当你编译时,他会查看你给他的字节码,并找出他必须生成的国家代码(汇编程序)。因此,当您运行这个nativ代码时,您不必了解如何使用解释器,这就是为什么它更快的原因

JIT编译器: JIT的思想是程序中的大部分时间都花在循环中。所以当你有一个有100次迭代的循环时,在每次迭代中你都会添加一些东西,解释器每次都要看看你想做什么,然后去做。JIT查看循环并说:“我不必找出它在agian上的100倍作用。我只需要编译这段代码。然后他做普通编译器所做的,生成一些nativ代码并运行它

JIT通常与解释器一起工作。解释器发现某个东西是一个循环,然后将其传递给JIT,在循环之后继续解释

Java和.NET的实现不使用解释器,这也是可能的。 firefox中的luajit、pypy和JS实现都有解释器

(你是否应该有翻译是争论的话题)


希望这有帮助。

而且应该有帮助。我看了一下,这有点过头了,所以JIT只与解释语言相关吗?这两种技术都用于中间语言,JIT编译是在应用程序执行过程中逐步将中间语言转换为本机语言的过程,也就是说,当调用中间语言时,抖动将检查它之前是否编译过,如果没有,它会动态地将其编译为本机代码,并将该部分IL代码标记为已编译,以便下次直接执行。另一方面,AOT编译是在应用程序之前将所有IL代码转换为本机代码的过程在编译时或运行时启动