Mozilla skiftede til at bruge en almindelig regulært udtryksmotor med Chromium

SpiderMonkey JavaScript-motor brugt i Firefox oversat at bruge en opdateret implementering af regulære udtryk baseret på den aktuelle kode Irregexp fra V8 JavaScript-motoren, der bruges i browsere baseret på Chromium-projektet. Den nye implementering af RegExp vil blive tilbudt i Firefox 78, planlagt til 30. juni, og vil bringe alle de manglende ECMAScript-elementer relateret til regulære udtryk til browseren.

Det bemærkes, at RegExp-motoren i SpiderMonkey er designet som en separat komponent, hvilket gør den relativt uafhængig og velegnet til udskiftning uden behov for at foretage væsentlige ændringer i kodebasen. Modularitet gjorde det muligt i 2014 at erstatte YARR RegExp-motoren, der oprindeligt blev brugt i Firefox, med en gaffel fra Irregexp-motoren fra V8. Irregexp er bundet til V8 API, bundet til skraldeopsamleren og bruger en V8-specifik strengrepræsentation og objektmodel. I processen med at tilpasse til SpiderMonkeys interne API i 2014 blev Irregexp-motoren delvist omskrevet, og nye ændringer, såsom '\u'-flaget, hvor det var muligt overført ind i en gaffel, der vedligeholdes af Mozilla.

Desværre er det vanskeligt og ressourcekrævende at vedligeholde en synkroniseret gaffel. Med fremkomsten af ​​nye funktioner relateret til regulære udtryk i ECMAScript 2018-standarden tænkte Mozilla-udviklere på, hvordan de kunne gøre det nemmere at migrere ændringer fra Irregexp. Som en udvej blev der foreslået et indpakningskoncept, som gør det muligt at bruge den næsten uændrede Irregexp-motor i SpiderMonkey (ændringerne reduceres kun til den automatiske udskiftning af "#include"-blokke).

Mozilla skiftede til at bruge en almindelig regulært udtryksmotor med Chromium

Rammerne giver Irregexp de nødvendige V8-specifikke funktioner, herunder funktioner til hukommelsesstyring og kodegenerering, såvel som indbyggede datastrukturer, der implementeres ved hjælp af hukommelsesstyringsmotorer, kodegeneratorer og SpiderMonkey-strukturer.

Opdatering af RegExp-motoren vil tillade Firefox at understøtte funktioner såsom navngivne captures, Unicode-tegnklasse-escape, dotAll-flaget og Lookbehind-tilstand:

  • Navngivne grupper giver dig mulighed for at knytte dele af en streng matchet af et regulært udtryk med specifikke navne i stedet for serienumre af matches (f.eks. i stedet for "/(\d{4})-(\d{2})-(\d{ 2})/” kan du angive “/( ? \d{4})-(? \d{2})-(? \d{2})/" og få adgang til året ikke gennem resultat[1], men gennem resultat.grupper.år).
  • Undslippende klasser Unicode-tegn tilføjer konstruktioner \p{...} og \P{...}, for eksempel definerer \p{Number} alle mulige tegn, der viser tal (inklusive tegn som ①), \p{Alphabetic} - bogstaver (inklusive hieroglyffer ), \p{Matematik} — matematiske symboler osv.
  • flag dotAll får "."-masken til at udløses. inklusive linjeskifttegn.
  • regime Se bag dig giver dig mulighed for i et regulært udtryk at bestemme, at et mønster går forud for et andet (for eksempel ved at matche et dollarbeløb uden at fange dollartegnet).

Projektet blev udført med deltagelse af V8-udviklere, som på deres side arbejdede på at reducere Irregexps afhængighed af V8, og flyttede nogle funktioner, der ikke kan implementeres ved hjælp af SpiderMonkey, til deaktivere "#ifdef"-blokke. Samarbejdet viste sig at være til gensidig fordel. Mozilla-udviklere indsendte ændringer til Irregexp, der eliminerer nogle uoverensstemmelser med kravene i JavaScript-standarden og forbedres kode kvalitet. Også under uklar test af Firefox blev tidligere ubemærkede fejl i Irregexp-koden, der førte til nedbrud, identificeret og elimineret.

Kilde: opennet.ru

Tilføj en kommentar