在https://v8.dev/docs/ignition上我们可以看到:
点火是使用TurboFan后端编写的基于寄存器的快速低级别解释器。
论https://docs.google.com/document/d/11T2CRex9hXxoJwbYqVQ32yIPMh0uouUZLdyrtmMoL44/edit?ts=56f27d9d#
点火项目的目的是为V8构建一个解释器,该解释器执行一个低级字节码,从而使运行一次或非热的代码能够以字节码的形式更紧凑地存储。 解释器本身由一组字节码处理程序代码片段组成,每个代码段处理一个特定的字节码,并为下一个字节码向处理程序发送。这些字节码处理程序 为了将一个函数编译成字节码,对JavaScript代码进行解析以生成它的AST (抽象语法树)。BytecodeGenerator遍历这个AST并酌情为每个AST节点生成字节码。 生成字节码处理程序的图形后,它将通过Turbofan管道的简化版本传递,并分配给解释器表中的相应条目。
因此,点火任务似乎是将BytecodeGenerator生成的字节码转换为字节码处理程序,并通过Turbofan执行它。
但在这里:

在这里:

你可以看到是点火产生了字节码。
更重要的是,在这个视频中,https://youtu.be/p-iiEDtpy6I?t=722点火被认为是一个基线编译器。
那是怎么回事?基线编译器?字节码解释器?到字节码转换器的AST?
这种形象似乎是最恰当的:

在这里,点火只是一个解释器,以前的一切都是没有名字的字节码生成器/优化器的东西。

发布于 2019-03-02 20:22:43
这里是V8开发人员。
在https://v8.dev/docs/ignition上我们可以看到: 点火是使用TurboFan后端编写的基于寄存器的快速低级别解释器。
是的,这概括起来了。为了增加更多细节:
生成字节码处理程序的图形后,它将通过Turbofan管道的简化版本传递,并分配给解释器表中的相应条目。因此,点火任务似乎是将BytecodeGenerator生成的字节码转换为字节码处理程序,并通过Turbofan执行。
设计文档的这一部分讨论如何生成字节码处理程序,它使用Turbofan的一部分“提前”(即编译V8时)。在运行时,字节码不被转换为处理程序,而是由现有的固定处理程序集“处理”(=运行、执行、解释),而不涉及Turbofan。
更重要的是,在这个视频中,https://youtu.be/p-iiEDtpy6I?t=722点火被认为是一个基线编译器。
在那一刻,这场演讲是指所有现代JavaScript引擎都有一个“基线编译器”的总体想法(在一个非常普遍的概念意义上--我同意幻灯片可以使这一点更加清晰)。请注意,幻灯片并没有提到任何关于点火的信息。下一张幻灯片说,点火在V8中扮演了这个角色。因此,更准确的说法是“点火取代基线编译器”或“点火是基线执行引擎”。或者你可以稍微重新定义你的术语,说“点火是一个产生字节码然后解释它的编译器”。
点火只是一个解释器,以前的一切都是没有名字的字节码生成器/优化器。
该幻灯片将“解释器”框显示为“点火字节码管道”的一部分。字节码发生器/优化器也是点火的一部分。
发布于 2020-05-15 22:36:28
请纠正我在理解转换过程中的错误:
https://stackoverflow.com/questions/54957946
复制相似问题