我对v8是如何工作的以及它如何执行js代码感到困惑。
我理解v8首先解析代码并创建AST,然后将它引入解释器作为输入并生成字节代码,然后引入到涡轮风扇编译器中,将中间代码转换为计算机理解的机器代码。
我正在阅读一个关于这个话题的文章,这是一个很好的话题,但事实证明,有些东西让我感到困惑。
我认为机器代码是被执行的代码,否则,如果字节代码是执行的,那么为什么我们需要创建该代码呢?
发布于 2021-09-12 21:23:31
(这里是V8开发人员。)
为了证实@Bergi在他的评论中说了什么:字节码主要用于由解释器执行,这实际上是执行JavaScript所需的全部内容。V8 (现在)并不是将所有函数编译成机器代码,只有那些运行热到可以优化编译以(可能)值得花费时间的函数。作为实现的一个特殊细节,优化编译器使用字节码作为输入,这为字节码提供了一个次要的用途;但这实际上只是一个可以以不同方式解决的细节,例如在优化编译器启动时,将原始源代码再次解析为AST,这是V8几年前以前一直使用的方法。
(您所链接的那篇文章确实提到了这些概念中的大多数,但我同意它写的有些令人困惑,我不同意它的一些特征。参见v8.dev/blog,以获得关于事物工作方式的官方描述。)
https://stackoverflow.com/questions/69153645
复制相似问题