我在网上找不到W3C语言如何编译成机器码的信息。我知道web和处理器之间的鸿沟一定是浏览器,但它是如何工作的,在处理器中执行Javascript之前有哪些步骤?
链接到科学文献也将受到极大的赞赏。
发布于 2012-01-11 21:16:33
这取决于实现;the specification是对语言及其工作原理的完整描述,实现可以自由地以任何他们喜欢的方式满足实现。一些实现(从外部看)似乎纯粹是一个旧意义上的解释器;其他的可能编译成字节码,也可能不编译成字节码;V8 ( Chrome、Chromium、Brave、Node.js和其他浏览器中的JavaScript引擎)过去编译成机器码(twice,用于应用程序中的热点),但现在开始解析字节码并在解释器中运行它,并且只在必要时编译热点(details)。(还有一种V8模式,它只进行解释,他们正在为不能在运行时编译的环境进行试验,比如iOS,在这种环境中,非苹果应用程序不允许分配可执行内存。)
V8团队(V8是Chromium和Chrome中的JavaScript引擎)定期发布描述,描述他们是如何从V8中获得惊人的速度的。你可以在V8 blog上找到其中的一些。
当然,您也可以绕过任何开源实现的代码。据我所知,V8和SpiderMonkey (Mozilla的引擎)是两个主要的开源软件。
发布于 2012-01-11 21:15:38
这可能会有所帮助:http://www.ecma-international.org/publications/standards/Ecma-262.htm
没有关于如何转换为字节码的规范(这取决于浏览器开发人员),但是有关于语言应该如何行为的规范
发布于 2014-10-11 15:45:03
对于Firefox,它的字节码有一些规范:
https://developer.mozilla.org/en-US/docs/Mozilla/Projects/SpiderMonkey/Bytecodes https://developer.mozilla.org/en-US/docs/Mozilla/Projects/SpiderMonkey/Internals/Bytecode
对于V8,它被直接编译成本机代码:
http://jayconrod.com/posts/51/a-tour-of-v8-full-compiler
https://stackoverflow.com/questions/8819846
复制相似问题