在https://v8.dev/docs/ignition上,我们可以看到:
但在这里:
和这里
,您可以看到是Ignition产生了字节码。
此外,在这个视频中https://youtu.be/p-iiEDtpy6I?t=722中,Ignition被称为基线编译器。
那么它是什么? 基线编译器? 字节码解释器? AST到字节码转换器?
这张图片似乎最合适:
,其中Ignition只是一个解释器,而之前的一切都是一个没有名字的字节码生成器/优化器。
在https://docs.google.com/document/d/11T2CRex9hXxoJwbYqVQ32yIPMh0uouUZLdyrtmMoL44/edit?ts=56f27d9d#上:Ignition是一个快速的、基于寄存器的低级别解释器,使用TurboFan的后端编写。
因此,看起来Ignition的工作是将由BytecodeGenerator生成的字节码转换为字节码处理程序,并通过Ignition项目的目标是为V8构建一个解释器,该解释器执行低级别的字节码,从而使只运行一次或非热代码以字节码形式更紧凑地存储。
解释器本身由一组字节码处理程序代码片段组成,每个处理程序处理特定的字节码并分派到下一个字节码的处理程序。这些字节码处理程序
要将函数编译为字节码,必须解析JavaScript代码以生成其AST(抽象语法树)。BytecodeGenerator遍历此AST,并根据需要为每个AST节点生成字节码。
一旦产生字节码处理程序的图表,它就通过Turbofan简化版本的流水线,并分配给解释器表中相应的条目。
Turbofan
执行它。但在这里:
![enter image description here](https://istack.dev59.com/BVO1H.webp)
![enter image description here](https://istack.dev59.com/4kybp.webp)
此外,在这个视频中https://youtu.be/p-iiEDtpy6I?t=722中,Ignition被称为基线编译器。
那么它是什么? 基线编译器? 字节码解释器? AST到字节码转换器?
这张图片似乎最合适:
![enter image description here](https://istack.dev59.com/jPAnp.webp)