具体来说,我正在研究v8引擎。我遇到了解析器和准备器。由字节流解码器生成的字节流将其解码为令牌。
是发送给准备器还是解析器的令牌? 同样,由于准备器不创建AST,那么当我们调用跳过且未编译的函数时,它会创建AST吗?
我浏览了net和v8的官方文档,我发现很难理解。
首先使用准备器(因此使用"pre-")
解析器在需要AST时使用,这是函数被编译(惰性或急切)的情况。
所有这些都是优化;这些细节可以而且确实会随着时间的推移而改变。JavaScript引擎通常不需要准备器。它可以快速编译所有函数。或者,即使它想要惰性地编译函数,它也可以使用完整的解析器来满足其准备需要,并简单地丢弃生成的AST。有一个独立的准备器,它做的工作更少,使它比完整的解析器更快。