首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >V8的点火功能到底是什么?

V8的点火功能到底是什么?
EN

Stack Overflow用户
提问于 2019-03-02 11:22:38
回答 2查看 2.6K关注 0票数 6

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?

这种形象似乎是最恰当的:

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-03-02 20:22:43

这里是V8开发人员。

https://v8.dev/docs/ignition上我们可以看到: 点火是使用TurboFan后端编写的基于寄存器的快速低级别解释器。

是的,这概括起来了。为了增加更多细节:

  • 名称“点火”指的是字节码生成器和字节码解释器。通常,整件事也被看作是一个大黑匣子,随便称为“翻译”,这有时会导致术语上的一些混乱。
  • 字节码生成器接受解析器为给定的JavaScript函数生成的AST,并从它生成字节码。
  • 字节码解释器接受字节码生成器生成的字节码,并通过将其发送给一组字节码处理程序来执行它。
  • 构成字节码解释器的字节码处理程序是使用Turbofan管道的一部分生成的。这种情况发生在V8编译时,而不是运行时。换句话说,你需要吐鲁番建造(部分)点火,但不是运行点火。
  • 分析器(以及它产生的AST/抽象语法树)不是点火的一部分。

生成字节码处理程序的图形后,它将通过Turbofan管道的简化版本传递,并分配给解释器表中的相应条目。因此,点火任务似乎是将BytecodeGenerator生成的字节码转换为字节码处理程序,并通过Turbofan执行。

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

更重要的是,在这个视频中,https://youtu.be/p-iiEDtpy6I?t=722点火被认为是一个基线编译器。

在那一刻,这场演讲是指所有现代JavaScript引擎都有一个“基线编译器”的总体想法(在一个非常普遍的概念意义上--我同意幻灯片可以使这一点更加清晰)。请注意,幻灯片并没有提到任何关于点火的信息。下一张幻灯片说,点火在V8中扮演了这个角色。因此,更准确的说法是“点火取代基线编译器”或“点火是基线执行引擎”。或者你可以稍微重新定义你的术语,说“点火是一个产生字节码然后解释它的编译器”。

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

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

票数 11
EN

Stack Overflow用户

发布于 2020-05-15 22:36:28

请纠正我在理解转换过程中的错误:

  • 将JS代码解析为AST
  • 发送到点火的AST将转换为字节码
  • 生成机器代码
  • 如果字节码是最佳的,将其发送到CPU进行处理。
  • 如果字节码需要优化,则发送给Turbofan进行优化。
  • 如果Turbofan收到字节码,它将进一步优化,并发送到计算机进行处理。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54957946

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档