Mozilla prešla na používanie bežného regulárneho výrazu s prehliadačom Chromium

SpiderMonkey JavaScript engine používaný vo Firefoxe prenesené používať aktualizovanú implementáciu regulárnych výrazov na základe aktuálneho kódu Irregexp z V8 JavaScript engine používaného v prehliadačoch založených na projekte Chromium. Nová implementácia RegExp bude ponúkaná vo Firefoxe 78, naplánovaná na 30. júna a prinesie do prehliadača všetky chýbajúce prvky ECMAScript súvisiace s regulárnymi výrazmi.

Je potrebné poznamenať, že motor RegExp v SpiderMonkey je navrhnutý ako samostatný komponent, čo ho robí relatívne nezávislým a vhodným na výmenu bez nutnosti robiť významné zmeny v kódovej základni. Modularita umožnila v roku 2014 nahradiť YARR RegExp engine pôvodne používaný vo Firefoxe za vidlicu Irregexp engine z V8. Irregexp je viazaný na V8 API, viazaný na garbage collector a používa reťazcovú reprezentáciu a objektový model špecifický pre V8. V procese prispôsobovania sa internému API SpiderMonkey v roku 2014 bol engine Irregexp čiastočne prepísaný a tam, kde to bolo možné, sa objavili zmeny, ako napríklad príznak „\u“. prenesené do vidlice spravovanej Mozillou.

Bohužiaľ, udržiavanie synchronizovanej vidlice je ťažké a náročné na zdroje. S príchodom nových funkcií súvisiacich s regulárnymi výrazmi v štandarde ECMAScript 2018 sa vývojári Mozilly zamysleli nad tým, ako uľahčiť migráciu zmien z Irregexp. Ako východisko bol navrhnutý obalový koncept, ktorý umožňuje použitie takmer nezmeneného enginu Irregexp v SpiderMonkey (zmeny sú zredukované len na automatickú výmenu blokov „#include“).

Mozilla prešla na používanie bežného regulárneho výrazu s prehliadačom Chromium

Rámec poskytuje Irregexpu potrebné schopnosti špecifické pre V8, vrátane funkcií správy pamäte a generovania kódu, ako aj natívnych dátových štruktúr, ktoré sú implementované pomocou modulov správy pamäte, generátorov kódu a štruktúr SpiderMonkey.

Aktualizácia nástroja RegExp umožní Firefoxu podporovať funkcie, ako sú pomenované zachytenia, escapovanie triedy znakov Unicode, príznak dotAll a režim Lookbehind:

  • Pomenované skupiny umožňujú priradiť časti reťazca zhodného s regulárnym výrazom s konkrétnymi názvami namiesto sériových čísel zhôd (napríklad namiesto „/(\d{4})-(\d{2})-(\d{ 2})/“ môžete zadať „/( ? \d{4})-(? \d{2})-(? \d{2})/" a pristupovať k roku nie cez result[1], ale cez result.groups.year).
  • Únikové triedy Znaky Unicode pridávajú konštrukcie \p{...} a \P{...}, napríklad \p{Číslo} definuje všetky možné znaky zobrazujúce čísla (vrátane znakov ako ①), \p{Alphabetic} - písmená (vrátane hieroglyfy ), \p{Math} — matematické symboly atď.
  • vlajka dotAll spôsobí odpálenie masky „.“. vrátane znakov pre posun riadkov.
  • režim Obzrite sa umožňuje určiť v regulárnom výraze, že jeden vzor predchádza druhému (napríklad zhoda s čiastkou v dolároch bez zachytenia znaku dolára).

Projekt sa uskutočnil za účasti vývojárov V8, ktorí zo svojej strany pracovali na znížení závislosti Irregexp na V8 a presunuli niektoré funkcie, ktoré nie je možné implementovať pomocou SpiderMonkey, do blokov vypnutia „#ifdef“. Spolupráca sa ukázala ako obojstranne výhodná. Vývojári Mozilly predložili do Irregexp zmeny, ktoré niektoré eliminujú nezrovnalosti s požiadavkami štandardu JavaScript a zlepšenie kvalitu kódu. Počas fuzzing testovania Firefoxu boli tiež identifikované a odstránené predtým nepovšimnuté chyby v kóde Irregexp, ktoré viedli k zlyhaniam.

Zdroj: opennet.ru

Pridať komentár