Mozilla pasou a usar un motor de expresións regulares común con Chromium

Motor JavaScript SpiderMonkey usado en Firefox traducido utilizar unha implementación actualizada de expresións regulares baseada no código actual Irrexexp do motor JavaScript V8 usado nos navegadores baseados no proxecto Chromium. A nova implementación de RegExp ofrecerase en Firefox 78, prevista para o 30 de xuño, e traerá ao navegador todos os elementos ECMAScript que faltan relacionados coas expresións regulares.

Nótese que o motor RegExp en SpiderMonkey está deseñado como un compoñente separado, o que o fai relativamente independente e axeitado para a substitución sen necesidade de facer cambios significativos na base de código. A modularidade fixo posible en 2014 substituír o motor YARR RegExp usado orixinalmente en Firefox por un fork do motor Irregexp de V8. Irregexp está ligado á API V8, ao colector de lixo e utiliza unha representación de cadea e un modelo de obxectos específicos de V8. No proceso de adaptación á API interna de SpiderMonkey en 2014, o motor Irregexp foi parcialmente reescrito e cambios emerxentes, como a bandeira '\u', sempre que foi posible transferido nunha bifurcación mantida por Mozilla.

Desafortunadamente, manter unha bifurcación sincronizada é difícil e require recursos. Coa chegada de novas funcións relacionadas coas expresións regulares no estándar ECMAScript 2018, os desenvolvedores de Mozilla pensaron en como facilitar a migración de cambios desde Irregexp. Como saída, propúxose un concepto de envoltura, que permite utilizar o motor Irregexp case sen cambios en SpiderMonkey (os cambios redúcense só á substitución automática dos bloques "#include").

Mozilla pasou a usar un motor de expresións regulares común con Chromium

O marco proporciona a Irregexp as capacidades específicas necesarias para V8, incluíndo funcións de xestión de memoria e xeración de código, así como estruturas de datos nativas que se implementan mediante motores de xestión de memoria, xeradores de código e estruturas SpiderMonkey.

A actualización do motor RegExp permitirá que Firefox admita funcións como capturas con nome, escape da clase de caracteres Unicode, a bandeira dotAll e o modo Lookbehind:

  • Grupos nomeados permítelle asociar partes dunha cadea coincidentes cunha expresión regular con nomes específicos en lugar de números de serie de coincidencias (por exemplo, en lugar de "/(\d{4})-(\d{2})-(\d{ 2})/” podes especificar “/( ? \d{4})-(? \d{2})-(? \d{2})/" e accede ao ano non a través de result[1], senón a través de result.groups.year).
  • Clases de escape Os caracteres Unicode engaden construcións \p{...} e \P{...}, por exemplo, \p{Número} define todos os caracteres posibles que representan números (incluídos caracteres como ①), \p{Alfabético} - letras (incluíndo xeroglíficos ), \p{Matemáticas} — símbolos matemáticos, etc.
  • Bandeira puntoTodo fai que se dispare a máscara "". incluíndo caracteres de avance de liña.
  • Modo Mira atrás permítelle determinar nunha expresión regular que un patrón precede a outro (por exemplo, facer coincidir unha cantidade en dólares sen capturar o signo de dólar).

O proxecto levouse a cabo coa participación de desenvolvedores de V8, que, pola súa banda, traballaron para reducir a dependencia de Irregexp de V8, e trasladaron algunhas funcións que non se poden implementar mediante SpiderMonkey a bloques desactivados "#ifdef". A cooperación resultou ser mutuamente beneficiosa. Pola súa banda, os desenvolvedores de Mozilla presentaron cambios a Irregexp que eliminan algúns inconsistencias cos requisitos do estándar JavaScript e mellorando calidade do código. Ademais, durante as probas confusas de Firefox, identificáronse e elimináronse erros previamente desapercibidos no código Irregexp que provocaban fallos.

Fonte: opennet.ru

Engadir un comentario