Zum Hauptinhalt springen

V8-Veröffentlichung v7.3

· 3 Minuten Lesezeit
Clemens Backes, Compiler-Bändiger

Alle sechs Wochen erstellen wir einen neuen Branch von V8 im Rahmen unseres Veröffentlichungsprozesses. Jede Version wird direkt vor einem Chrome-Beta-Meilenstein aus dem Git-Master von V8 verzweigt. Heute freuen wir uns, unseren neuesten Branch, V8 Version 7.3, anzukündigen, der bis zu seiner Veröffentlichung in mehreren Wochen in Zusammenarbeit mit Chrome 73 Stable in der Beta-Phase ist. V8 v7.3 ist vollgepackt mit allerlei von Entwicklern geschätzten Features. Dieser Beitrag bietet einen Überblick über einige der Highlights als Vorgeschmack auf die Veröffentlichung.

Asynchrone Stack-Traces

Wir aktivieren die Flagge --async-stack-traces standardmäßig. Kostenlose asynchrone Stack-Traces erleichtern die Diagnose von Problemen in Produktionsumgebungen mit stark asynchronem Code, da die error.stack-Eigenschaft, die normalerweise an Logdateien/-dienste gesendet wird, jetzt mehr Einsicht darüber bietet, was das Problem verursacht hat.

Schnellere await-Operationen

Im Zusammenhang mit der oben genannten --async-stack-traces-Flagge aktivieren wir auch die --harmony-await-optimization-Flagge standardmäßig, da sie eine Voraussetzung für die --async-stack-traces ist. Siehe schnellere asynchrone Funktionen und Promises für weitere Details.

Schnellere Wasm-Starts

Durch Optimierungen der internen Abläufe von Liftoff haben wir die WebAssembly-Kompilierungsgeschwindigkeit erheblich verbessert, ohne die Qualität des erzeugten Codes zu beeinträchtigen. Für die meisten Workloads wurde die Kompilierungszeit um 15–25 % reduziert.

Liftoff-Kompilierungszeit auf der Epic ZenGarden-Demo

JavaScript-Sprachfunktionen

V8 v7.3 kommt mit mehreren neuen JavaScript-Sprachfunktionen.

Object.fromEntries

Die Object.entries-API ist nichts Neues:

const object = { x: 42, y: 50 };
const entries = Object.entries(object);
// → [['x', 42], ['y', 50]]

Leider gab es bisher keine einfache Möglichkeit, aus dem entries-Ergebnis wieder ein gleichwertiges Objekt zu erstellen… bis jetzt! V8 v7.3 unterstützt Object.fromEntries(), eine neue eingebaute API, die die Umkehrung von Object.entries ausführt:

const result = Object.fromEntries(entries);
// → { x: 42, y: 50 }

Für weitere Informationen und Anwendungsbeispiele, siehe unsere Erklärung zu Object.fromEntries.

String.prototype.matchAll

Ein häufiger Anwendungsfall von globalen (g) oder stickigen (y) regulären Ausdrücken ist die Anwendung auf eine Zeichenkette und das Iterieren durch alle Übereinstimmungen. Die neue String.prototype.matchAll-API erleichtert dies mehr denn je, insbesondere für reguläre Ausdrücke mit Erfassungsgruppen:

const string = 'Lieblings-GitHub-Repos: tc39/ecma262 v8/v8.dev';
const regex = /\b(?<owner>[a-z0-9]+)\/(?<repo>[a-z0-9\.]+)\b/g;

for (const match of string.matchAll(regex)) {
console.log(`${match[0]} bei ${match.index} mit '${match.input}'`);
console.log(`→ Besitzer: ${match.groups.owner}`);
console.log(`→ Repo: ${match.groups.repo}`);
}

// Ausgabe:
//
// tc39/ecma262 bei 23 mit 'Lieblings-GitHub-Repos: tc39/ecma262 v8/v8.dev'
// → Besitzer: tc39
// → Repo: ecma262
// v8/v8.dev bei 36 mit 'Lieblings-GitHub-Repos: tc39/ecma262 v8/v8.dev'
// → Besitzer: v8
// → Repo: v8.dev

Für weitere Details, lesen Sie unsere Erklärung zu String.prototype.matchAll.

Atomics.notify

Atomics.wake wurde in Atomics.notify umbenannt und entspricht damit einer aktuellen Spezifikationsänderung.

V8-API

Bitte verwenden Sie git log branch-heads/7.2..branch-heads/7.3 include/v8.h, um eine Liste der API-Änderungen zu erhalten.

Entwickler mit einer aktiven V8-Auscheckung können git checkout -b 7.3 -t branch-heads/7.3 verwenden, um die neuen Funktionen in V8 v7.3 auszuprobieren. Alternativ können Sie sich für den Beta-Kanal von Chrome einschreiben und die neuen Funktionen schon bald selbst ausprobieren.