Aller au contenu principal

Publication de la version v7.3 de V8

· 4 minutes de lecture
Clemens Backes, maître des compilateurs

Toutes les six semaines, nous créons une nouvelle branche de V8 dans le cadre de notre processus de publication. Chaque version est dérivée du maître Git de V8 juste avant une étape Beta de Chrome. Aujourd’hui, nous sommes heureux d’annoncer notre nouvelle branche, V8 version 7.3, qui est en bêta jusqu'à sa publication en coordination avec Chrome 73 Stable dans plusieurs semaines. V8 v7.3 est rempli de toutes sortes d’améliorations pour les développeurs. Ce post offre un aperçu de certains des points forts avant la publication.

Traces de pile asynchrones

Nous activons le drapeau --async-stack-traces par défaut. Les traces de pile asynchrones sans coût facilitent le diagnostic des problèmes en production avec du code fortement asynchrone, car la propriété error.stack habituellement envoyée aux fichiers ou services de journalisation fournit maintenant plus d’informations sur la cause du problème.

await plus rapide

En relation avec le drapeau --async-stack-traces mentionné ci-dessus, nous activons également par défaut le drapeau --harmony-await-optimization, qui est une condition préalable pour --async-stack-traces. Consultez fonctions asynchrones et promesses plus rapides pour plus de détails.

Démarrage Wasm plus rapide

Grâce à des optimisations des internes de Liftoff, nous avons considérablement amélioré la vitesse de compilation de WebAssembly sans nuire à la qualité du code généré. Pour la plupart des workloads, le temps de compilation a été réduit de 15 à 25 %.

Temps de compilation de Liftoff sur la démo Epic ZenGarden

Fonctionnalités du langage JavaScript

V8 v7.3 apporte plusieurs nouvelles fonctionnalités du langage JavaScript.

Object.fromEntries

L’API Object.entries n’est pas nouvelle :

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

Malheureusement, il n’y avait pas de moyen simple de revenir du résultat entries à un objet équivalent… jusqu’à maintenant ! V8 v7.3 prend en charge Object.fromEntries(), une nouvelle API intégrée qui effectue l’inverse de Object.entries :

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

Pour plus d’informations et des exemples d’utilisation, consultez notre explainer sur Object.fromEntries.

String.prototype.matchAll

Un cas d'utilisation fréquent des expressions régulières globales (g) ou adhésives (y) est de les appliquer à une chaîne et d’itérer sur toutes les correspondances. La nouvelle API String.prototype.matchAll facilite plus que jamais cela, notamment pour les expressions régulières avec des groupes de capture :

const string = 'Dépôts favoris de GitHub : 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]} à ${match.index} avec '${match.input}'`);
console.log(`→ propriétaire : ${match.groups.owner}`);
console.log(`→ dépôt : ${match.groups.repo}`);
}

// Résultat :
//
// tc39/ecma262 à 23 avec 'Dépôts favoris de GitHub : tc39/ecma262 v8/v8.dev'
// → propriétaire : tc39
// → dépôt : ecma262
// v8/v8.dev à 36 avec 'Dépôts favoris de GitHub : tc39/ecma262 v8/v8.dev'
// → propriétaire : v8
// → dépôt : v8.dev

Pour plus de détails, lisez notre explainer sur String.prototype.matchAll.

Atomics.notify

Atomics.wake a été renommé en Atomics.notify, conformément à un changement récent de la spécification.

API V8

Veuillez utiliser git log branch-heads/7.2..branch-heads/7.3 include/v8.h pour obtenir une liste des changements de l’API.

Les développeurs ayant une copie active de V8 peuvent utiliser git checkout -b 7.3 -t branch-heads/7.3 pour expérimenter les nouvelles fonctionnalités de V8 v7.3. Alternativement, vous pouvez vous abonner au canal Beta de Chrome et essayer les nouvelles fonctionnalités bientôt.