V8中的数组方法是用C ++,Torque编写还是在运行时将JS转换为机器代码?

时间:2019-06-13 17:39:10

标签: javascript v8

我正在了解V8的运行时间,并且想知道例如数组方法(例如array.map)是否在V8中用C ++编写?我在这里看到一些Torque文件使我感到困惑,所以我想知道它们是否是用Torque而不是C ++编写的?

https://github.com/v8/v8/blob/master/src/builtins/array-map.tq

我的理解是V8使用即时(JIT)概念将JavaScript代码转换为机器代码。

所以我想我想知道是否存在array.map的C ++或Torque等效项,还是C ++或Torque模块仅用于将array.map的JS版本转换为机器代码?

谢谢!

1 个答案:

答案 0 :(得分:1)

V8开发人员在这里。我们有几种不同的“内建函数”实现技术:有些是用C ++编写的,有些是用Torque编写的,有些是我们称为CodeStubAssembler的实现,有些则直接用汇编实现。在V8的早期版本中,有些是用JavaScript实现的。这些策略中的每一种都有自己的优势(消除代码复杂性,可调试性,各种情况下的性能,二进制大小和内存消耗);加上历史上一直存在代码随时间演变的原因。