JavaScript-motorn SpiderMonkey som anvÀnds i Firefox med en uppdaterad implementering av reguljÀra uttryck som baseras pÄ aktuell kod 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 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.
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
- 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]).
- 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 leder till att masken "." Àven fÄngar nya rad-symptom.
- LÀge 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 med kraven i JavaScript-standarden och 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
