Mozilla hà cambiatu à utilizà un mutore d'espressione regulare cumuni cù Chromium

U mutore JavaScript SpiderMonkey di Firefox traduttu per utilizà una implementazione aghjurnata di l'espressioni regulare basatu annantu à u codice attuale Irregexp da u mutore JavaScript V8 utilizatu in i navigatori basati nantu à u prughjettu Chromium. Una nova implementazione di RegExp serà pruposta in a versione di u 78 di ghjugnu di Firefox 30, è permetterà à u navigatore di implementà tutti l'elementi ECMAScript mancanti ligati à l'espressioni regulare.

Hè nutatu chì u mutore RegExp in SpiderMonkey hè designatu cum'è un cumpunente separatu, chì u face relativamente indipindenti è adattatu per a sustituzione senza a necessità di fà cambiamenti significati à a basa di codice. A modularità hà permessu in 2014 di rimpiazzà u mutore YARR RegExp urigginariamente utilizatu in Firefox cù una furchetta di u mutore Irregexp da V8. Irregexp hè ligata à l'API V8, ligata à u cullettivu di basura, usa a rapprisintazioni di stringa specifica di V8 è u mudellu d'ughjettu. In u prucessu di adattazione à l'API interna di SpiderMonkey in 2014, u mutore Irregexp hè statu parzialmente riscritto, è i cambiamenti chì appariscenu, cum'è a bandiera '\u', induve pussibule suppurtatu à una forchetta mantenuta da Mozilla.

Sfurtunatamente, mantene una furchetta sincronizata hè difficiule è esige assai risorse per mantene. Cù l'intruduzioni di novi funzioni ligati à l'espressioni regulari in u standard ECMAScript 2018, i sviluppatori di Mozilla cuminciaru à pensà à cumu puderanu facilmente portà i cambiamenti da Irregexp. Cum'è una manera di esce, u cuncettu di ubligatoriu hè statu prupostu, chì permette di usà u mutore Irregexp quasi invariatu in SpiderMonkey (i cambiamenti sò solu à a sustituzione automatica di blocchi "#include").

Mozilla hà cambiatu à utilizà un mutore d'espressione regulare cumuni cù Chromium

U ligame furnisce Irregexp cù e caratteristiche specifiche V8 necessarie, cumprese a gestione di memoria è e funzioni di generazione di codice, è ancu strutture di dati iniziali chì sò implementati nantu à a basa di i meccanismi di gestione di memoria, generatori di codice è strutture SpiderMonkey.

Un aghjurnamentu di u mutore RegExp permetterà à Firefox di supportà funzioni cum'è captures di nome, scappendu classi di caratteri Unicode, a bandiera dotAll è u modu Lookbehind:

  • Gruppi chjamati permette di associà parti di una stringa accumpagnata da una espressione regulare cù certi nomi invece di numeri di serie di partite (per esempiu, invece di "/(\d{4})-(\d{2})-(\d{ 2})/" pudete specificà "/(? \d{4})-(? \d{2})-(? \d{2})/" è accede à l'annu micca per u risultatu [1], ma per u risultatu.groups.year).
  • Escape classi I caratteri Unicode aghjunghjenu i custruzzioni \p{…} è \P{…}, per esempiu, \p{Number} definisce tutti i caratteri pussibuli cù l'imaghjini di numeri (inclusi caratteri cum'è ①), \p{Alfabetic} - lettere (cumprese ieroglyphs ), \p{Math} - simboli matematichi, etc.
  • Bandiera puntu tuttu provoca a maschera "." inclusi i caratteri di nova linea.
  • Modu Guardà daretu permette di determinà in una espressione regulare chì un mudellu precede l'altru (per esempiu, currisponde à una quantità di dollaru senza catturà u signu di dollaru).

U prughjettu hè statu implementatu cù a participazione di i sviluppatori di V8, chì, per a so parte, anu travagliatu per riduce a dependenza di Irregexp à V8, è trasfirìu alcune funzioni chì ùn ponu esse implementate basatu in SpiderMonkey in blocchi "#ifdef" disabilitati. A cullaburazione hè stata dimustrata per esse mutualmente benefica. Per a so parte, i sviluppatori di Mozilla anu sottumessu cambiamenti à Irregexp chì eliminanu alcuni inconsistenze cù i requisiti di u standard JavaScript è migliurà qualità di codice. Inoltre, durante a prova di fuzzing di Firefox, errori precedentemente inosservati in u codice Irregexp, chì portanu à crash, sò stati identificati è riparati.

Source: opennet.ru

Add a comment