首页 > 解决方案 > 为什么不同架构下 Javascript 的字节码(v8 引擎)生成不同

问题描述

v8 生成的字节码是平台无关的吗?

如果是这样,我曾尝试在不同的架构(x86、x64)中生成字节码。结果不同架构下的字节码生成是不同的。这是什么原因?

x86和x64下同一个JS生成的字节码。 在此处输入图像描述

标签: javascriptbytecode

解决方案


(这里是 V8 开发人员。)

JavaScript 作为一种语言,没有标准化的字节码,因此除了“它不存在”之外,没有关于通用“JavaScript 字节码”的声明。

也就是说,一些 JavaScript 引擎,包括最新版本的 V8,在内部使用字节码。这完全是引擎内部的实现细节。我们对此不做任何承诺,也不提供任何文档,因为引擎之外的任何人都不应该依赖它的任何特定方面,或者根本不依赖它的存在。(从历史上看,2017 年之前,V8 内部没有使用字节码;谁知道呢,也许将来我们最终会回到无字节码的实现。同时,字节码的一些细节经常会从一个V8 版本到下一个。)

ByteNode 是一种将引擎内部细节重新用于(或“滥用”)其他目的的黑客。如果您觉得它解决了您遇到的问题,那就太好了;但这不是我们(=V8 团队)支持或认可的东西。(事实上​​,就我个人而言,我很怀疑它是否完成了比缩小/“丑化” JS 所做的任何事情:有点混淆。)

至于具体问题:通用字节码机制与平台无关,这是其目的的一部分。但是字节码从来没有被设计/打算离开它生成的机器,所以没有理由不让一些细节取决于那台机器是什么。要查找此类详细信息,您可以浏览bytecode-generator.cc并查找取决于当前平台或指针大小的任何内容。尽管一旦您发现了这样的差异,您可能无法采取任何措施来解决它。


推荐阅读