JavaScript-Engine V8 9.0.0 kommuniziert schneller mit WebAssembly

Google führt mit dem Update unter anderem einen Match-Index für Regular Expressions ein und überarbeitet die Kommunikation zwischen JavaScript und WebAssembly.

In Pocket speichern vorlesen Druckansicht
Lesezeit: 2 Min.
Von
  • Madeleine Domogalla

Für Googles JavaScript-Engine V8 liegt mit 9.0 ein neues Release vor. Die neunte Hauptversion markiert den Beginn eines neuen Zweiges. Bis das nächste Chrome-Release unter der Versionsnummer 90 stabil ist, behält die aktuelle V8-Version den Beta-Status.

V8 9 führt einen Match-Index für Regular Expressions (RegExp) ein. Entwicklerinnen und Entwicklern erhalten die Möglichkeit, ein Array mit den Start- und Endpositionen der entsprechenden Capture-Gruppe im Match mit RegExp abzurufen. Das Array ist über die Property .indices für Match-Objekte verfügbar, wenn der reguläre Ausdruck das Flag /d hat.

Neu ist auch, dass man das Keyword super nun für den Zugriff auf Properties und Funktionen des übergeordneten Objekts verwenden kann. Bisher wurde der Zugriff auf ein Super-Property (z. B. super.x) über einen Laufzeitaufruf implementiert. Mit V8 9.0 kommt das Inline-Cache-System (IC) in nicht optimiertem Code zum Einsatz, das den entsprechenden optimierten Code für den Zugriff auf das Super Property generiert, ohne auf die Laufzeit zurückgreifen zu müssen. Dadurch erhöht sich offenbar die Geschwindigkeit für den Zugriff auf Properties.

Bisher gab es beim Aufruf von JavaScript zu WebAssembly Einbußen in der Leistung, da V8 unterschiedliche Darstellungsformen für die Parameter von WebAssembly- und JavaScript-Funktionen nutzt. Beim Aufruf einer exportierten WebAssembly-Funktion durch JavaScript, durchläuft der Aufruf einen sogenannten JS-to-Wasm-Wrapper, der für die Anpassung der Parameter von JavaScript zu WebAssembly sorgt – auch in umgekehrter Richtung. Mit dem Update erhält der JS-to-Wasm-Wrapper nun die Möglichkeit, an der Aufrufstelle eingebettet (inlined) zu werden, was den Code vereinfachen und diesen zusätzlichen Frame entfernen soll. Es handelt sich um ein experimentelles Feature, was sich über den Flag --turbo-inline-js-wasm-calls deaktivieren lässt.

Aufgrund einer kürzlich entdeckten grammatikalischen Mehrdeutigkeit wird die Token-Sequenz für for (async of ab sofort nicht mehr geparst. Nähere Informationen zur neuen Version der JavaScript-Engine finden sich im Beitrag auf dem V8-Blog.

(mdo)