Mozilla a commencé à utiliser un moteur d'expressions régulières commun avec Chromium

Le moteur JavaScript SpiderMonkey utilisé dans Firefox traduit pour utiliser une mise en œuvre mise à jour des expressions régulières, basée sur le code actuel Irregexp du moteur JavaScript V8, utilisé dans les navigateurs basés sur le projet Chromium. La nouvelle implémentation de RegExp sera proposée dans la version de Firefox 78, prévue pour le 30 juin, et permettra d'implémenter dans le navigateur tous les éléments manquants d'ECMAScript liés aux expressions régulières.

Il est à noter que le moteur RegExp dans SpiderMonkey est conçu comme un composant séparé, ce qui le rend relativement indépendant et apte à être remplacé sans nécessiter de modifications significatives de la base de code. La modularité a permis, en 2014, de remplacer le moteur RegExp YARR initialement utilisé dans Firefox par un fork du moteur Irregexp de V8. Irregexp est lié à l'API V8, attaché au ramasse-miettes, utilise une représentation de chaînes et un modèle d'objet spécifiques à V8. Dans le processus d'adaptation à l'API interne de SpiderMonkey en 2014, le moteur Irregexp a été partiellement réécrit, et les changements apparaissant, comme le drapeau '\u', ont été, dans la mesure du possible transférés dans une branche, maintenue par Mozilla.

Malheureusement, maintenir un fork synchronisé est une tâche difficile et son entretien nécessite beaucoup de ressources. Avec l'apparition dans la norme ECMAScript 2018 de nouvelles fonctionnalités liées aux expressions régulières, les développeurs de Mozilla se sont interrogés sur la façon de simplifier le transfert des modifications depuis Irregexp. Comme solution, le concept de liaison a été proposé, permettant d'utiliser dans SpiderMonkey un moteur Irregexp presque inchangé (les modifications se limitent seulement au remplacement automatique des blocs «#include»).

Mozilla a commencé à utiliser un moteur d'expressions régulières commun avec Chromium

La liaison fournit à Irregexp les fonctionnalités spécifiques nécessaires de V8, y compris les fonctions de gestion de la mémoire et de génération de code, ainsi que les structures de données d'origine qui sont mises en œuvre sur la base des mécanismes de gestion de la mémoire, des générateurs de code et des structures de SpiderMonkey.

La mise à jour du moteur RegExp permettra d'assurer dans Firefox le support de fonctionnalités telles que les groupes nommés (named captures), l'échappement des classes de caractères Unicode, le drapeau dotAll et le mode Lookbehind :

  • Groupes nommés permettent de lier les parties de chaîne correspondantes à une expression régulière à des noms spécifiques au lieu de numéros d'ordre de correspondance (par exemple, au lieu de «/(\d{4})-(\d{2})-(\d{2})/», on peut spécifier «/(?\d{4})-(?\d{2})-(?\d{2})/» et accéder à l'année non pas par result[1], mais par result.groups.year).
  • L'échappement des classes de caractères Unicode ajoute les constructions \p{…} et \P{…}, par exemple, \p{Number} définit tous les symboles qui ont l'apparence de chiffres (y compris les symboles tels que ①), \p{Alphabetic} — les lettres (y compris les idéogrammes), \p{Math} — les symboles mathématiques, etc.
  • Drapeau dotAll fait que le masque «.» fonctionne également pour les caractères de nouvelle ligne.
  • Mode Lookbehind permet de déterminer dans une expression régulière qu'un modèle précède un autre (par exemple, faire correspondre un montant en dollars sans capturer le signe dollar).

Le projet a été réalisé avec la participation des développeurs de V8, qui ont de leur côté travaillé à réduire la dépendance d'Irregexp à V8 et ont placé certaines caractéristiques, impossibles à réaliser sur la base de SpiderMonkey, dans des blocs désactivables « #ifdef ». La collaboration s'est révélée mutuellement bénéfique. Pour leur part, les développeurs de Mozilla ont transmis à Irregexp des modifications éliminant certaines incohérences avec les exigences de la norme JavaScript et améliorant la qualité du code. De plus, lors des tests de fuzzing de Firefox, des erreurs dans le code d'Irregexp, auparavant non détectées, entraînant des plantages, ont été identifiées et corrigées.

Source : opennet.ru

Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS 🔥 Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster