首页 > 解决方案 > V8 引擎是否使用 C++ 替换了以前用 JavaScript 编写的部分代码库?

问题描述

我之前读过V8引擎源代码。我可以在其中找到 JavaScript 实现的代码,例如Array.js

最近想再次查找数组排序的源码,发现JS部分已经去掉了。我只能找到array-sort.tq,它位于[v8/third_party/v8/builtins] 中。

我正在寻找的方法有问题吗?还是只是去掉了 JS 部分?JavaScript 开发人员很难知道实现的细节。

标签: javascriptc++v8

解决方案


一些内置函数(例如Array.prototype.sort)现在是用Torque而不是 C++ 或 JavaScript 编写的。Torque 是为 V8 构建的语言:

该语言被设计得足够简单,可以轻松地将 ECMAScript 规范直接翻译成 V8 中的实现,但也足够强大,可以以稳健的方式表达低级 V8 优化技巧,例如基于测试创建快速路径特定的对象形状。

...

Torque 提供语言结构来表示 V8 实现的高级、语义丰富的花絮,并且 Torque 编译器使用CodeStubAssembler.

(更多关于CodeStubAssembler 这里。)

更多在Torque builtins 博客文章中。

所以是的,现在Array.prototype.sort还有很多其他Array方法都是用 Torque 编写的,这些方法被编译成高效的汇编代码,供 V8 的 JavaScript 解释器(Ignition)和 JavaScript 编译器(TurboFan)使用。(是的,V8 两者兼有。:-)更多信息,但简而言之:V8 将 JavaScript 解析为字节码,然后使用 Ignition 对其进行解释。热点 [经常运行的区域] 在需要时通过 TurboFan 编译为本机代码。)


推荐阅读