Javascript是如何翻译成字节码的?

Javascript是如何翻译成字节码的?,javascript,compiler-construction,Javascript,Compiler Construction,我在网上找不到W3C语言如何编译成机器代码的信息。我知道web和处理器之间的差距一定在某种程度上取决于浏览器,但它是如何工作的,以及在处理器中执行Javascript之前的步骤是什么 也非常感谢与科学文献的链接。这可能有助于: 没有关于如何翻译成字节码的规范(这取决于浏览器开发人员),但有关于语言行为的规范这取决于实现;是对该语言的完整描述以及它应该如何工作,实现可以自由地以任何方式满足该实现。一些实现看起来(从外部)纯粹是作为旧意义上的解释器来运行它;其他人可能编译成字节码,也可能不编译成字节

我在网上找不到W3C语言如何编译成机器代码的信息。我知道web和处理器之间的差距一定在某种程度上取决于浏览器,但它是如何工作的,以及在处理器中执行Javascript之前的步骤是什么

也非常感谢与科学文献的链接。

这可能有助于:


没有关于如何翻译成字节码的规范(这取决于浏览器开发人员),但有关于语言行为的规范

这取决于实现;是对该语言的完整描述以及它应该如何工作,实现可以自由地以任何方式满足该实现。一些实现看起来(从外部)纯粹是作为旧意义上的解释器来运行它;其他人可能编译成字节码,也可能不编译成字节码;V8(Chrome、Chrome、Brave、Node.js和其他版本中的JavaScript引擎)用于编译为机器代码(用于应用程序中的热点),但现在开始解析字节码并在解释器中运行,并且只在必要时编译热点()。(还有一种V8模式,在这种模式下,它只进行解释,他们正在尝试在不允许在运行时编译的环境中使用这种模式,例如不允许非苹果应用程序分配可执行内存的iOS。)

V8团队(V8是Chrome和Chrome中的JavaScript引擎)定期发布关于如何从V8中获得惊人速度的描述。你可以在网上找到一些

当然,您也可以随意使用任何开源实现的代码。V8和SpiderMonkey(Mozilla的引擎)是我知道的两个主要的开源引擎。

Javascript(顾名思义)是动态的。这意味着它的代码在运行时由web浏览器的Javascript引擎进行分析和执行

这取决于Web浏览器如何处理Javascript。有些可能会生成中间语言或字节码。有些人可以直接分析和执行它

以下是执行Javascript(在运行时解析和执行)的最简单方法的步骤:
  • 解析和预处理(或其他)
  • 分析
  • 执行



    将Javascript编译为特定于本机平台的机器代码(以获得最佳性能)。它还有一个机制。

    除了已经给出的有用的、特定的答案之外,如果性能是您的主要兴趣,那么“自适应优化”一词可能值得一看。JavaScript及其解释器只是需要在运行时将其他内容转换为机器代码的系统的最新实例,因此有大量更广泛的阅读。Pascal、Smalltalk、Java等字节码形式很容易被视为在任意硬件上运行定义语言过程中的中间形式——例如,苹果的SquirrelFish创建字节码并在其上使用JIT编译器。

    对于Firefox,其字节码有一些规范:

    对于V8,它直接编译为本机代码:


    这是google托管v8 javascript引擎的地方。顺便说一句,你为什么想知道这个?JavaScript不是W3C语言。它(或者更确切地说是ECMAScript)是ECMA的国际标准。每个引擎都有不同的做法。并非所有浏览器都是浏览器的一部分。没有一个规范规定JavaScript应该如何翻译成字节码,但有自己的方法。@TJHeuvel:哇,这是一个非常好的区别,我肯定不会反对——也不会就此结束投票。对我来说,关于编程语言的问题实际上是关于编程或足够接近的问题。(在任何情况下,这都是投票结果接近而不是被否决的原因,但我们不要吹毛求疵。:-)我只想补充一点,我首先在这里问了一个问题,他们把我送回这里:)顺便说一句,Javascript是ECMAScript的一种方言,以防你不知道,JavaScript是ECMAScript标准的一个实现:JavaScript包含标准未定义的扩展。虽然这些是概念性步骤,但在现代引擎中,它比这更复杂。:-)@T.J.Crowder我同意。但我想,我会先给OP一个大致的想法和概念。