Mozilla har övergÄtt till att anvÀnda en gemensam regular expressions-motor med Chromium

JavaScript-motorn SpiderMonkey som anvÀnds i Firefox översatt med en uppdaterad implementering av reguljÀra uttryck som baseras pÄ aktuell kod Irregexp frÄn JavaScript-motorn V8, som anvÀnds i webblÀsare baserade pÄ Chromium-projektet. Den nya implementeringen av RegExp kommer att introduceras i Firefox version 78, planerad till den 30 juni, och kommer att möjliggöra implementeringen av alla saknade ECMAScript-element relaterade till reguljÀra uttryck i webblÀsaren.

Det noteras att RegExp-motorn i SpiderMonkey har utformats som en separat komponent, vilket gör den relativt oberoende och möjlig att byta ut utan att göra betydande Ă€ndringar i kodbasen. Modulariteten möjliggjorde Ă„r 2014 att man ersatte den ursprungligen anvĂ€nda RegExp-motorn YARR i Firefox med en fork av Irregexp-motorn frĂ„n V8. Irregexp Ă€r knuten till V8 API, kopplad till skrĂ€psamlaren, anvĂ€nder V8-specifika strĂ€ngrepresentationer och objektmodeller. Vid anpassningen till den interna API:n i SpiderMonkey 2014 skrevs Irregexp-motorn delvis om, och förĂ€ndringar som flaggan '\u' överfördes i den mĂ„n det var möjligt till den gren som stöds av Mozilla. TyvĂ€rr Ă€r det en utmaning att upprĂ€tthĂ„lla en synkroniserad fork, och dess underhĂ„ll krĂ€ver stora resurser. Med introduktionen av nya funktioner relaterade till reguljĂ€ra uttryck i ECMAScript-standard 2018 började Mozilla-utvecklarna fundera pĂ„ hur man kan förenkla överföringen av Ă€ndringar frĂ„n Irregexp. Som en lösning föreslogs en inlindningskoncept som möjliggör anvĂ€ndningen av Irregexp i SpiderMonkey nĂ€stan oförĂ€ndrat (Ă€ndringar begrĂ€nsas till automatisk ersĂ€ttning av ‘#include’-block).

Inlindningen tillhandahÄller Irregexp de nödvÀndiga V8-specifika funktionerna, inklusive minneshantering och kodgenereringsfunktioner, samt de grundlÀggande datastrukturer som Àr baserade pÄ mekanismer för minneshantering, kodgeneratorer och strukturer frÄn SpiderMonkey.

Mozilla har övergÄtt till att anvÀnda en gemensam regular expressions-motor med Chromium

Uppdateringen av RegExp-motorn kommer att sÀkerstÀlla stöd i Firefox för funktioner som namngivna grupper (named captures), undanröjning av Unicode-teckenkategorier, dotAll-flaggan och Lookbehind-lÀget:

Namngivna grupper

  • Namngivna grupper möjliggör att knyta matchade delar av en strĂ€ng med hjĂ€lp av reguljĂ€ra uttryck till specifika namn istĂ€llet för matchningens nummer (till exempel, istĂ€llet för "/(\d{4})-(\d{2})-(\d{2})/" kan man ange "/(?\d{4})-(?\d{2})-(?\d{2})/" och fĂ„ Ă„tkomst till Ă„ret genom result.groups.year istĂ€llet för result[1]).
  • Escaping av klasser Unicode-tecken lĂ€gger till konstruktioner \p{
} och \P{
}, till exempel, \p{Number} definierar alla möjliga tecken som har en siffra (inklusive tecken av typen ①), \p{Alphabetic} - bokstĂ€ver (inklusive hieroglyfer), \p{Math} - matematiska symboler, osv.
  • Flagga dotAll leder till att masken "." Ă€ven fĂ„ngar nya rad-symptom.
  • LĂ€ge Lookbehind möjliggör att definiera i ett reguljĂ€rt uttryck att ett mönster föregĂ„r ett annat (till exempel, matcha en summa i dollar utan att fĂ„nga dollartecknet).

Projektet genomfördes med deltagande av V8-utvecklarna, som i sin tur arbetade med att minska Irregexp:s beroende av V8 och placerade vissa funktioner som inte kan implementeras i SpiderMonkey i avaktiverade block "#ifdef". Samarbetsprojektet visade sig vara ömsesidigt fördelaktigt. Mozilla-utvecklarna Ä sin sida överförde Àndringar till Irregexp som eliminerar vissa inkonsistenser med kraven i JavaScript-standarden och förbÀttrar kodens kvalitet. Dessutom upptÀcktes och ÄtgÀrdades tidigare okÀnda buggar i Irregexp-koden under fuzzing-testning av Firefox, vilket ledde till krascher.

KĂ€lla: opennet.ru

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster