La version 8.0 de V8 est disponible et apporte le chaînage d’optionnel, la coalescence nulle
et 40 % d'utilisation de mémoire en moins

La version 8.0 du moteur JavaScript open source V8 de Google est disponible. La dénomination V8 v8 ne sonne pas seulement bien, mais c’est aussi une version qui apporte quelques améliorations de performances, des corrections de bogues et de nouvelles fonctionnalités. Dans V8 v8.0, des fonctionnalités ECMAScript attendues par plusieurs ont été ajoutées, notamment le chaînage d’optionnels (?.), la coalescence nulle (??), etc. Une liste des modifications de l'API dans V8 v8.0 est fournie en entrant la commande git log branch-heads/7.9..branch-heads/8.0 include/v8.h.

V8 est un moteur JavaScript et WebAssembly open source qui a été publié pour la première fois par Google en 2008 et est écrit en C++. Le moteur multiplateforme peut fonctionner de manière autonome ou être intégré dans une application C++. Google a intégré le moteur V8 dans les navigateurs Chromium et Google Chrome, et il est également utilisé sur la plateforme Node.js. Enfin, il s'exécute sur les systèmes d’exploitation Windows 7 ou les versions ultérieures, macOS 10.12+ et Linux utilisant des processeurs x64, IA-32, ARM ou MIPS.

Depuis fin 2018, le moteur V8 a subi quelques améliorations et est désormais plus léger. En septembre dernier, l’équipe de développement de V8 a annoncé que les diverses améliorations qu’elle a apportées au moteur l’ont rendu plus rapide et moins gourmand en mémoire, utilisant désormais moins de mémoire. Cette semaine, l’équipe a publié la version 8.0 du moteur. Cette nouvelle version n’introduit pas de nouvelles fonctionnalités en tant que telles, mais s’est concentrée sur l’amélioration des performances du moteur et la correction de bogues.
Voici un aperçu de certains des points forts en prévision de la sortie en coordination avec la version stable de Chrome 80 dans quelques semaines.

Performance (taille et vitesse)

Le tas V8 contient toute une série d'éléments, par exemple des valeurs en virgule flottante, des caractères de chaîne, du code compilé et des valeurs balisées (qui représentent des pointeurs dans le tas V8 ou de petits entiers). En apportant des améliorations au tas de V8, l’équipe a pu économiser en moyenne 40 % de la mémoire du tas. Notons que dans les améliorations apportées au moteur en septembre dernier, l’équipe de V8 est parvenue à rendre le moteur plus avec 22 % de charge de mémoire en moins que les versions précédentes. Toutefois, concernant ces économies de mémoire, l’équipe V8 a expliqué que lorsqu'on améliore la mémoire, cela se fait généralement au prix de la performance. Habituellement.

Nom : z1.png
Affichages : 7992
Taille : 16,1 Ko

Optimisation des modules intégrés d'ordre supérieur

L’équipe V8 a annoncé avoir récemment supprimé une limitation dans le pipeline d'optimisation de TurboFan. Selon elle, cette limitation empêchait les optimisations agressives des modules intégrées d'ordre supérieur. Jusqu'à présent, l'appel à charCodeAt était complètement opaque à TurboFan, ce qui a conduit à la génération d'un appel générique à une fonction définie par l'utilisateur. Avec ce changement, l’équipe V8 estime que vous pouvez maintenant reconnaître que vous appelez en fait la fonction intégrée String.prototype.charCodeAt.

Par ailleurs, ce changement vous permet également de déclencher toutes les autres optimisations que TurboFan a en stock pour améliorer les appels aux fonctions intégrées. Selon l’équipe V8, ce changement affecte beaucoup d'autres modules intégrés comme Function.prototype.apply, Reflect.apply, et beaucoup de modules de tableaux d'ordre supérieur (par exemple Array.prototype.map).

Le chaînage d’optionnels (?.)

Côté JavaScript, certaines fonctionnalités ECMAScript ont fait leur apparition comme le chaînage d’optionnels. Le chaînage d’optionnels (?.) permet aux programmeurs d'écrire des chaînes d'accès aux propriétés plus robustes, qui vérifient si les valeurs intermédiaires sont nulles. Si une valeur intermédiaire est nulle, l'expression entière est évaluée à indéfinie. Outre les accès aux propriétés statiques, les appels, les accès aux propriétés dynamiques sont aussi pris en charge. Vous pouvez consulter la documentation de l’outil pour plus de détails et d'exemples.

La coalescence nulle (??)

L'opérateur coalescent nul « ?? » est un nouvel opérateur binaire de court-circuit pour le traitement des valeurs par défaut. Actuellement, les valeurs par défaut sont parfois gérées avec l'opérateur logique « || ». En effet, l'utilisation de « || » est indésirable pour le calcul des valeurs par défaut, car « a || b » évalue à b quand a est faux. Cependant, avec l'opérateur de coalescence nulle, « a ? ? b » évalue à b quand a est null (null ou indéfini), et sinon évalue à a. C'est le comportement souhaité pour la valeur par défaut.

Selon l’équipe V8, l'opérateur à coalescence nulle (??) et l’opérateur de chaînage d’optionnels (?.) sont des caractéristiques complémentaires et fonctionnent bien ensemble. Pour finir, vous pouvez avoir une liste des diverses modifications apportées à l’API V8 en tapant la commande suivante : « git log branch-heads/7.9..branch-heads/8.0 include/v8.h ». En outre, les développeurs ayant un checkout V8 actif peuvent utiliser « git checkout -b 8.0 -t branch-heads/8.0 » pour expérimenter les nouvelles fonctionnalités de V8 v8.0.

Source : V8

Et vous ?

Qu'en pensez-vous ?

Voir aussi

V8, le moteur JavaScript de Google, est désormais plus léger avec 22 % de charge de mémoire en moins

Le moteur de JavaScript V8 de Chrome bénéficie d'un lot d'améliorations afin de le rendre plus rapide et moins lourd

La RC1 de PowerShell 7.0 est disponible avec un support à long terme (LTS) pour .NET Core 3.1, l'opérateur ternaire « a ? b : c », l'opérateur d'affectation et de coalescence nulle « ?? et ??= »