V8 执行解释器生成的字节代码还是涡轮风扇编译器生成的二进制代码? [关闭]

2023-12-09

我对 v8 的工作原理以及它如何执行 js 代码感到困惑。

据我了解,v8 首先解析代码并创建 AST,然后将此 AST 引入解释器作为输入并生成字节代码,然后将此字节代码引入到 Turbofan 编译器,将中间代码转换为计算机可以理解的机器代码。

我正在读一本article关于这个话题很好,但事实证明有些事情让我感到困惑

  1. 执行阶段:利用V8引擎运行时环境的内存堆和调用栈来执行字节码

我认为机器代码是被执行的代码,否则为什么我们需要创建该代码,如果字节代码是被执行的代码?


(V8 开发人员在此。)

为了确认 @Bergi 在他的评论中所说的话:字节码主要用于由解释器执行的目的,而这实际上是执行 JavaScript 所需的全部内容。 V8(现在)不会将所有函数编译为机器代码,只有那些运行得足够热以进行优化编译的函数(可能)值得投入时间。作为实现的一个特定细节,优化编译器使用字节码作为输入,这为字节码提供了次要目的;但这实际上只是一个可以通过不同方式解决的细节,例如在优化编译器启动时再次将原始源代码解析为 AST,直到几年前,V8 都是这样做的。

(您链接到的文章确实提到了大部分概念,但我同意它写得有些混乱,而且我不同意它的一些特征。参见v8.dev/博客有关事情如何运作的官方描述。)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

V8 执行解释器生成的字节代码还是涡轮风扇编译器生成的二进制代码? [关闭] 的相关文章

随机推荐