Do V8 execute Byte code produced by the interpreter or binary code produced by the turbofan compiler?(V8是执行解释器生成的字节代码,还是执行Turbofan编译器生成的二进制代码?)
问题描述
我搞不懂V8是如何工作的,以及它是如何执行js代码的。
我知道V8首先解析代码并创建AST,然后将此AST作为输入引入解释器并产生字节码,然后将此字节码引入Turbofan编译器,将中间代码转换为计算机能够理解的机器代码。
我正在读一篇关于这个主题的article,这很好,但结果有些事情让我困惑
- 执行阶段:使用V8引擎运行时环境的内存堆和调用堆栈执行字节码
我认为机器代码是被执行的代码,否则如果字节码是被执行的代码,为什么我们需要创建该代码??
推荐答案
(此处为V8开发人员)
为了证实@Bergi在他的评论中所说的:字节码主要用于由解释器执行的目的,而这实际上是执行JavaScript所需的全部。V8(现在的)不会将所有函数编译成机器码,只有那些运行得足够热以进行优化编译的函数才值得(可能)投入时间。作为实现的一个特定细节,优化编译器使用字节码作为输入,这使字节码具有次要的用途;但这实际上只是一个可以用不同方式解决的细节,例如,当优化编译器开始工作时,通过再次将原始源代码解析为AST,这是几年前V8一直使用的方式。
(您链接的文章确实提到了这些概念中的大多数,但我同意它的写作有些令人困惑,我不同意它的一些描述。有关事物如何工作的官方描述,请参阅v8.dev/blog。)
这篇关于V8是执行解释器生成的字节代码,还是执行Turbofan编译器生成的二进制代码?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:V8是执行解释器生成的字节代码,还是执行Turbofan编译器生成的二进制代码?
- Quasar 2+Apollo:错误:找不到ID为默认的Apollo客户端。如果您在组件设置之外,请使用ProvideApolloClient() 2022-01-01
- addEventListener 在 IE 11 中不起作用 2022-01-01
- 使用RSelum从网站(报纸档案)中抓取多个网页 2022-09-06
- Css:将嵌套元素定位在父元素边界之外一点 2022-09-07
- CSS媒体查询(最大高度)不起作用,但为什么? 2022-01-01
- 如何使用 JSON 格式的 jQuery AJAX 从 .cfm 页面输出查 2022-01-01
- 400或500级别的HTTP响应 2022-01-01
- 失败的 Canvas 360 jquery 插件 2022-01-01
- Flexslider 箭头未正确显示 2022-01-01
- Fetch API 如何获取响应体? 2022-01-01