A Mozilla passou a usar um mecanismo de expressões regulares comum com o Chromium

O motor JavaScript SpiderMonkey usado no Firefox foi convertido para usar uma implementação atualizada de expressões regulares, baseada em código recente Irregexp do motor JavaScript V8, usado em navegadores baseados no projeto Chromium. A nova implementação RegExp será proposta na versão do Firefox 78, programada para 30 de junho, e permitirá implementar no navegador todos os recursos ausentes do ECMAScript relacionados a expressões regulares.

Observa-se que o motor RegExp no SpiderMonkey está estruturado como um componente separado, o que o torna relativamente independente e adequado para substituições sem a necessidade de grandes alterações na base de código. A modularidade permitiu, em 2014, substituir o motor RegExp YARR inicialmente usado no Firefox por um fork do motor Irregexp do V8. O Irregexp está vinculado à API do V8, dependendo do coletor de lixo, e utiliza uma representação de strings e um modelo de objeto específicos do V8. No processo de adaptação à API interna do SpiderMonkey em 2014, o motor Irregexp foi parcialmente reescrito, e as mudanças que surgiram, como a flag '\u', foram transferidas para um branch mantido pela Mozilla.

Infelizmente, manter um fork sincronizado é uma tarefa difícil e sua manutenção requer muitos recursos. Com a introdução de novos recursos relacionados a expressões regulares no padrão ECMAScript 2018, os desenvolvedores da Mozilla estão considerando como simplificar a transferência de mudanças do Irregexp. Como solução, foi proposta a ideia de um wrapper, que permite usar no SpiderMonkey um motor Irregexp quase inalterado (as mudanças se restringem apenas à substituição automática de blocos '#include').

A Mozilla passou a usar um mecanismo de expressões regulares comum com o Chromium

O wrapper fornece ao Irregexp as funcionalidades específicas do V8 necessárias, incluindo gerenciamento de memória e geração de código, bem como as estruturas de dados originais que são implementadas com base nos mecanismos de gerenciamento de memória, geradores de código e estruturas do SpiderMonkey.

A atualização do motor RegExp permitirá que o Firefox suporte recursos como grupos nomeados (named captures), escape de classes de caracteres Unicode, flag dotAll e modo Lookbehind:

  • Grupos nomeados permitem vincular partes da string correspondidas pela expressão regular a nomes específicos em vez de números de sequência (por exemplo, em vez de "/(\d{4})-(\d{2})-(\d{2})/" pode-se usar "/(?\d{4})-(?\d{2})-(?\d{2})/" e acessar o ano não através de result[1], mas através de result.groups.year).
  • Escapando classes Os caracteres Unicode adicionam as construções \p{…} e \P{…}, por exemplo, \p{Number} define todos os possíveis caracteres que representam números (incluindo caracteres como ①), \p{Alphabetic} — letras (incluindo hieróglifos), \p{Math} — símbolos matemáticos, etc.
  • A bandeira dotAll faz com que a máscara «.» corresponda também a caracteres de nova linha.
  • Modo Lookbehind permite determinar em uma expressão regular que um padrão precede outro (por exemplo, corresponder a uma soma em dólares sem capturar o símbolo do dólar).

O projeto foi realizado com a participação dos desenvolvedores do V8, que, por sua vez, trabalharam na redução da dependência do Irregexp em relação ao V8, isolando algumas características que não podiam ser implementadas com o SpiderMonkey em blocos desativáveis "#ifdef". A colaboração se revelou mutuamente benéfica. Da sua parte, os desenvolvedores da Mozilla enviaram para o Irregexp alterações que resolveram algumas inconformidades com os requisitos do padrão JavaScript e melhoraram a qualidade do código. Além disso, durante os testes de fuzzing no Firefox, erros que antes não haviam sido detectados no código do Irregexp, levando a falhas, foram identificados e corrigidos.

Fonte: opennet.ru

Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS 🔥 Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS | ProHoster