Mozilla est passé à l'utilisation d'un moteur d'expression régulière commun avec Chromium

Moteur JavaScript SpiderMonkey utilisé dans Firefox transféré utiliser une implémentation mise à jour d'expressions régulières basée sur le code actuel Irrégularité du moteur JavaScript V8 utilisé dans les navigateurs basés sur le projet Chromium. La nouvelle implémentation de RegExp sera proposée dans Firefox 78, prévue pour le 30 juin, et apportera au navigateur tous les éléments ECMAScript manquants liés aux expressions régulières.

Il convient de noter que le moteur RegExp de SpiderMonkey est conçu comme un composant distinct, ce qui le rend relativement indépendant et peut être remplacé sans qu'il soit nécessaire d'apporter des modifications significatives à la base de code. La modularité a permis en 2014 de remplacer le moteur YARR RegExp initialement utilisé dans Firefox par un fork du moteur Irregexp de V8. Irregexp est lié à l'API V8, au garbage collector et utilise une représentation sous forme de chaîne et un modèle objet spécifiques à la V8. Lors du processus d'adaptation à l'API interne de SpiderMonkey en 2014, le moteur Irregexp a été partiellement réécrit et des changements émergents, tels que l'indicateur « \u », lorsque cela était possible. transféré dans un fork maintenu par Mozilla.

Malheureusement, maintenir un fork synchronisé est difficile et nécessite beaucoup de ressources. Avec l'avènement de nouvelles fonctionnalités liées aux expressions régulières dans la norme ECMAScript 2018, les développeurs de Mozilla ont réfléchi à la manière de faciliter la migration des modifications depuis Irregexp. En guise de solution, un concept d'emballage a été proposé, qui permet d'utiliser le moteur Irregexp presque inchangé dans SpiderMonkey (les modifications se réduisent uniquement au remplacement automatique des blocs « #include »).

Mozilla est passé à l'utilisation d'un moteur d'expression régulière commun avec Chromium

Le framework fournit à Irregexp les fonctionnalités nécessaires spécifiques à la V8, notamment des fonctions de gestion de la mémoire et de génération de code, ainsi que des structures de données natives implémentées à l'aide de moteurs de gestion de mémoire, de générateurs de code et de structures SpiderMonkey.

La mise à jour du moteur RegExp permettra à Firefox de prendre en charge des fonctionnalités telles que les captures nommées, l'échappement de classe de caractères Unicode, l'indicateur dotAll et le mode Lookbehind :

  • Groupes nommés vous permettent d'associer des parties d'une chaîne correspondant à une expression régulière à des noms spécifiques au lieu de numéros de série de correspondances (par exemple, au lieu de « /(\d{4})-(\d{2})-(\d{ 2})/", vous pouvez spécifier "/( ? \d{4})-(? \d{2})-(? \d{2})/" et accédez à l'année non pas via result[1], mais via result.groups.year).
  • Échapper aux cours Les caractères Unicode ajoutent des constructions \p{...} et \P{...}, par exemple, \p{Number} définit tous les caractères possibles représentant des nombres (y compris des symboles comme ①), \p{Alphabetic} - des lettres (y compris hiéroglyphes ), \p{Math} — symboles mathématiques, etc.
  • Drapeau pointTous provoque le déclenchement du masque "." y compris les caractères de saut de ligne.
  • régime Regarde derrière vous permet de déterminer dans une expression régulière qu'un modèle en 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 V8, qui, pour leur part, ont travaillé pour réduire la dépendance d'Irregexp à l'égard de la V8 et ont déplacé certaines fonctionnalités qui ne peuvent pas être implémentées sur la base de SpiderMonkey vers des blocs désactivés « #ifdef ». La coopération s’est avérée mutuellement bénéfique. De leur côté, les développeurs de Mozilla ont soumis des modifications à Irregexp qui éliminent certains incohérences aux exigences du standard JavaScript et amélioration qualité du code. De plus, lors des tests de fuzzing de Firefox, des erreurs jusque-là inaperçues dans le code Irregexp qui entraînaient des plantages ont été identifiées et éliminées.

Source: opennet.ru

Ajouter un commentaire