V8 Torque
对于一个V8读者来说,我们可能听说过CodeStubAssembler
或者他的缩写CSA
。CSA是一个V8的组件,它可以让我们直接用C++来写一些底层的TurboFan IR,然后编译成合适的、用TurboFan作为后端的机械码。
CSA常常被利用来写一些JavaScript自带的语言特性的“捷径”。这些捷径用来检测一些可以被优化的代码,比如原型链中没有元素,没有访问器,等等,然后使用一些更快、更专一的实现去完成这些操作。这种优化相对于使用传统的、通用的方法来说,有着几倍的执行时间优势。
CSA的劣势在于它可以被认为是一种“汇编”语言。控制流使用了很多label
和goto
,让CSA在使用一些复杂的实现的时候,很难去读懂和保证它不产生错误。
对于V8 Torque
。这是一种领域专属语言,使用了和Typescript类似的语法。Torque几乎允许所有CSA用到的控制语句和控制层,同时提供了高阶的循环包装——while
和For
等待。这个语言是强类型的,同时将在以后的版本中包含类似于Rust的安全检查和越界检查,从而保证了V8工程师有更好的安全性保证。
第一个用Torque写的的内置算法就是TypedArray#sort
和Dataview
的操作。他们都给Torque开发者们提供了额外的反馈。在编写的时候,JSArray的一些实现被搬移到了Torque上(比如Array#unshift),同时,其他的数组方法都被完全重写了。