Uda*_*ale 5 architecture computer-science compilation
我一直在努力寻找基线编译器和基线解释器的定义我很惊讶没有在任何地方提到它。
如果我没记错的话,基线编译器会将代码编译成字节码而不是依赖于架构的机器码,对吧?
我在 JavaScript 运行时引擎的上下文中找到了一些有关该主题的信息,特别是针对 Web 浏览器: 简而言之,基线编译器是运行时引擎执行代码期间的某个阶段。它将非常快速地生成机器代码,但不会对代码实际运行的机器进行优化。因此,它实际上是更广泛的即时 (JIT) 编译概念中的一种方法,因此在概念上介于代码解释和代码编译之间。
\n本文提供了有关 JavaScript JIT 编译的一些背景知识:
\n\n\n总之,加载 JavaScript 代码后,源代码将转换为称为抽象语法树或 AST 的树表示形式。之后,根据引擎/操作系统/平台,\n既不会编译此代码的基线版本,也不会创建字节码以供解释。[...]
\n当一段代码被执行多次时,[...],解释器会失去性能,因为它需要一遍又一遍地解释同一段代码,当这种情况发生时,探查器会标记这段代码作为温暖和基线\n编译器开始行动。
\n当执行此代码段时 [...],JIT 只需再次获取此编译片段。当以相同方式(如相同类型)多次调用热代码时,它\xe2\x80\x99 被标记为热代码。[...]
\n当一段代码被标记为热门时,优化器编译器会生成该代码的更快版本。
\n
这是另一个解释“热”代码和不同代码执行层概念的来源。
\n这个(较旧的)公告讨论了 Mozilla(当时)的新 JavaScript 引擎以及所包含的基线编译器解决的问题。
\n另一篇 Mozilla 博客文章提供了有关代码执行的非常详细的信息,由于新的要求和条件而进一步改变了概念:
\n\n\n然而,现代网络拥有如此庞大的代码库,即使\n相对较快的 Baseline JIT 编译器也花费了大量时间进行编译。\n为了解决这个问题,Firefox 70 在管道中添加了一个名为 Baseline\n解释器的新层。
\n
另一方面,Chromium 似乎在 2010 年在其 V8 引擎中引入了这个概念(称为基础编译器),并在 2017 年再次放弃了它。
\n在查阅了很多文章和书籍后,我能够推断出“基线编译器”的含义。
基本上,基线编译器的工作是尽可能快地生成字节码或机器码。然而,这个输出代码(机器代码或中间代码)并没有针对处理器进行非常优化,因此它在运行时非常低效和缓慢。
另一方面,优化编译器会生成高效的代码,但需要更长的时间。
因此,当您希望尽快加载和运行应用程序并稍后在后台使用优化编译器优化代码时,基线编译器非常有用。