Mozilla er gået over til at bruge den samme regulære udtryksmotor som Chromium.

Den JavaScript-motor, der anvendes i Firefox, SpiderMonkey til CodeMirror 6. til at bruge en opdateret implementering af regulære udtryk, baseret på den aktuelle kode Irregexp fra JavaScript-motoren V8, der anvendes i browsere baseret på Chromium-projektet. Den nye implementering af RegExp vil blive præsenteret i Firefox-version 78, der er planlagt til den 30. juni, og vil gøre det muligt at implementere alle de manglende elementer i ECMAScript, der er relateret til regulære udtryk, i browseren.

Det bemærkes, at RegExp-motoren i SpiderMonkey er designet som en separat komponent, hvilket gør den relativt uafhængig og egnet til udskiftning uden betydelige ændringer i kodebasen. Modulariteten gjorde det muligt i 2014 at erstatte den oprindeligt anvendte RegExp-motor i Firefox, YARR, med en fork af motoren Irregexp fra V8. Irregexp er knyttet til V8's API, bundet til affaldsopsamleren, anvender V8-specifikke strenge- og objektmodeller. I tilpasningsprocessen til SpiderMonkey's interne API i 2014 blev Irregexp-motoren delvist gen skrevet, og nye ændringer, som flaget ‘\u’, blev så vidt muligt overført til en gren, der støttes af Mozilla.

Desværre er vedligeholdelse af en synkroniseret fork en vanskelig opgave, og det kræver store ressourcer. Med de nye muligheder relateret til regulære udtryk, som blev introduceret i ECMAScript 2018-standarden, begyndte udviklerne hos Mozilla at overveje, hvordan de kunne forenkle overførslen af ændringer fra Irregexp. Som en løsning blev konceptet for en wrapper foreslået, som giver mulighed for at bruge Irregexp-motoren i SpiderMonkey næsten uændret (ændringer begrænser sig kun til automatisk at erstatte blokke af «#include»).

Mozilla er gået over til at bruge den samme regulære udtryksmotor som Chromium.

Wrapperen leverer de nødvendige V8-specifikke funktioner til Irregexp, inklusive hukommelsesstyring og code generation-funktioner, samt de oprindelige datatyper, som er implementeret baseret på mekanismerne til hukommelsesstyring, code generators og strukturer i SpiderMonkey.

Opdateringen af RegExp-motoren vil muliggøre understøttelse af funktioner som navngivne grupper, escape-sekvenser for Unicode-tegn, dotAll-flaget og Lookbehind-tilstand i Firefox:

  • Navngivne grupper gør det muligt at knytte de matchende dele af strengen fundet med det regulære udtryk til bestemte navne i stedet for positionsnumre for matches (fx i stedet for «/(\d{4})-(\d{2})-(\d{2})/» kan man angive «/(?\d{4})-(?\d{2})-(?\d{2})/» og tilgå året ikke via result[1], men via result.groups.year).
  • Escaping af klasser Unicode-tegn tilføjer konstruktioner \p{…} og \P{…}, for eksempel \p{Number} definerer alle mulige tegn, der viser cifre (inklusive tegn som ①), \p{Alphabetic} — bogstaver (herunder tegnskrift), \p{Math} — matematiske tegn osv.
  • Flaget dotAll fører til aktivering af masken «.» også for linjeskift-tegn.
  • Tilstand Lookbehind muliggør at bestemme i et regulært udtryk, at et mønster forudgår et andet (for eksempel kan man matche en sum i dollars uden at fange dollartegnet).

Projektet blev gennemført med deltagelse af V8-udviklerne, som har arbejdet på at reducere Irregexp's afhængighed af V8 og har flyttet nogle funktioner, der ikke kan implementeres på SpiderMonkey, til de frakoblingsblokke "#ifdef". Samarbejdet viste sig at være gensidigt fordelagtigt. Fra deres side har Mozilla-udviklerne overført ændringer til Irregexp, der fjerner nogle uoverensstemmelser med kravene i JavaScript-standarden og forbedrer kodekvaliteten. Desuden blev der i løbet af fuzzing-testningen af Firefox opdaget og rettet tidligere uopdagede fejl i Irregexp-koden, som førte til nedbrud.

Kilde: opennet.ru

Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere 🔥 Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster