https://v8.dev/docs/ignition上,我们可以看到:

https://docs.google.com/document/d/11T2CRex9hXxoJwbYqVQ32yIPMh0uouUZLdyrtmMoL44/edit?ts=56f27d9d#

因此,似乎点火工作是将BytecodeGenerator生成的字节码转换为字节码处理程序,并通过Turbofan执行。
但在这儿:
javascript - V8的点火真正起什么作用?-LMLPHP
和这里:
javascript - V8的点火真正起什么作用?-LMLPHP
您可以看到是点火产生了字节码。
此外,在此视频https://youtu.be/p-iiEDtpy6I?t=722中,点火被称为基准编译器。
那是什么
基准编译器?字节码解释器? AST转换为字节码转换器?
该图像似乎是最合适的:
javascript - V8的点火真正起什么作用?-LMLPHP
在这里,点火只是一个解释器,之前的一切都是无名的字节码生成器/优化器。
javascript - V8的点火真正起什么作用?-LMLPHP

最佳答案

V8开发人员在这里。


是的,总结一下。要添加更多细节:

  • 名称“Ignition”是指字节码生成器和字节码解释器。通常,整个事情也被视为一个大黑匣子,并随意地称为“解释器”,有时可能会导致术语混淆。
  • 字节码生成器采用解析器为给定的JavaScript函数生成的AST,并从中生成字节码。
  • 字节码解释器接收由字节码生成器生成的字节码,并通过将其发送到一组字节码处理程序进行解释来执行该字节码。
  • 组成Bytecode解释器的Bytecode处理程序是使用Turbofan管道的一部分生成的。这是在V8编译时发生的,而不是在运行时发生的。换句话说,您需要涡轮风扇来构建点火(的一部分),而不是运行点火。
  • 解析器(及其产生的AST /抽象语法树不属于Ignition。


  • 因此,似乎点火工作是将BytecodeGenerator生成的字节码转换为字节码处理程序,然后通过Turbofan执行

    设计文档的这一部分讨论有关生成字节码处理程序的过程,该过程使用Turbofan的一部分“提前”(即,在编译V8时)发生。在运行时,字节码不会转换为处理程序,而是由现有的固定处理程序集“处理”(=运行,执行,解释),并且不涉及Turbofan。

    当时,演讲是指所有现代JavaScript引擎都具有“基准编译器”的一般想法(从非常一般的概念意义上讲,我同意幻灯片可以使这一点变得更加清晰)。请注意,幻灯片未提及点火。下一张幻灯片说,点火在V8中扮演着这个角色。因此,更准确的说法是说“点火代替了基准编译器”或“点火是基准执行引擎”。或者,您可以稍微重新定义您的术语,然后说:“点火是生成字节码然后对其进行解释的编译器”。

    该幻灯片将“解释器”框显示为“点火字节码管道”的一部分。字节码生成器/优化器也是点火的一部分。

    09-17 18:15