V8エンジンバージョン9.0のリリースに含まれるもの

2021年3月17日、V8エンジンの9番目のバージョンのリリースが公開されました。この投稿は、リリース変更ログに含まれていたものの簡単な説明です。





オリジナルのポストV8リリースv9.0





JavaScript

RegExpのインデックスを一致させる

バージョン9.0以降、開発者は、正規表現に一致するキャプチャグループに一致する開始位置と終了位置の配列を取得できます。この配列は.indices



、正規表現にフラグがある場合、オブジェクトを照合するためのプロパティ介して使用できます/ d







const re = /(a)(b)/d;      // Note the /d flag.
const m = re.exec('ab');
console.log(m.indices[0]); // Index 0 is the whole match.
// → [0, 2]
console.log(m.indices[1]); // Index 1 is the 1st capture group.
// → [0, 1]
console.log(m.indices[2]); // Index 2 is the 2nd capture group.
// → [1, 2]
      
      







super

super



(, super.x



) V8 TurboFan. , super



, , , .









"for ( async of "

V8 v9.0, . for ( async of



.





WebAssembly

JS-to-Wasm

V8 WebAssembly JavaScript. , JavaScript WebAssembly, JS-to-Wasm, JavaScript WebAssembly, , .





, , , JavaScript WebAssembly , JavaScript JavaScript. , JS-to-Wasm ., .





, WebAssembly, , :





double addNumbers(double x, double y) {
  return x + y;
}
      
      



たとえば、JavaScriptでこの関数を呼び出して、複数のベクトル(型付き配列として表される)を追加します。





const addNumbers = instance.exports.addNumbers;

function vectorSum(len, v1, v2) {
  const result = new Float64Array(len);
  for (let i = 0; i < len; i++) {
    result[i] = addNumbers(v1[i], v2[i]);
  }
  return result;
}

const N = 100_000_000;
const v1 = new Float64Array(N);
const v2 = new Float64Array(N);
for (let i = 0; i < N; i++) {
  v1[i] = Math.random();
  v2[i] = Math.random();
}

// Warm up.
for (let i = 0; i < 5; i++) {
  vectorSum(N, v1, v2);
}

// Measure.
console.time();
const result = vectorSum(N, v1, v2);
console.timeEnd();
      
      



この機能はまだ実験段階であり、フラグを使用して有効にすることができます--turbo-inline-js-wasm-calls







詳細については、設計ドキュメントを参照してください








All Articles