V8的ignition是编译器还是逐行解释器?

问题描述 投票:0回答:1

我尝试查看一些 V8 博客来理解这一点,但它们似乎可以互换使用编译器和解释器。我想知道ignition是否将其转换/编译为字节码,然后将其转换/解释并逐行执行生成的机器代码。或者它是否停止生成字节码的工作。那么,什么组件逐行解释呢?另外我认为turbofan只编译热函数来优化执行。

Ignition 和涡轮风扇发动机如何协同工作?就像ignition创建字节码一样,并且还逐行解释和运行几次,并且分析有关执行的信息,例如数据类型。接下来,使用这些信息,涡轮风扇尽可能通过为热函数生成机器代码来优化代码。因此,ignition 逐行解释非热函数,并且仅执行热函数的机器代码。 当遇到意外的数据类型更改时,优化的代码会失败,并且引擎会通过点火再次恢复为逐行解释。这就是一切的运作方式吗?

javascript compilation v8 interpreter ignition
1个回答
0
投票

我想知道ignition是否转换/编译为字节码

是的,Ignition 将 JavaScript 转换为字节码。您可能会将该过程称为“编译”,但该术语具有不同的含义。

然后它转换/解释它

是的,确实如此,它基本上是一个大循环,其中包含存储在字节码中的所有不同指令的开关。这可能被称为
字节码解释器

(或虚拟机 - 另一个重载术语)。

并逐行执行生成的机器代码。

不,还没有机器代码(这就是 Maglev 和 Turbofan 将生成的代码),字节码也已经抽象出了原始源代码的“行”,所以它并不是真正的“逐行”。

那么,什么组件逐行解释呢?

据我所知,V8 目前没有基于 AST 的解释器。

© www.soinside.com 2019 - 2024. All rights reserved.