Mozilla je s Chromiumom prešla na uporabo skupnega mehanizma regularnih izrazov

Motor SpiderMonkey JavaScript, ki se uporablja v Firefoxu preneseno za uporabo posodobljene izvedbe regularnih izrazov na podlagi trenutne kode Irregexp iz motorja V8 JavaScript, ki se uporablja v brskalnikih, ki temeljijo na projektu Chromium. Nova izvedba RegExp bo na voljo v Firefoxu 78, predvidoma 30. junija, in bo v brskalnik prinesla vse manjkajoče elemente ECMAScript, povezane z regularnimi izrazi.

Treba je opozoriti, da je mehanizem RegExp v SpiderMonkey zasnovan kot ločena komponenta, zaradi česar je razmeroma neodvisen in primeren za zamenjavo, ne da bi bilo treba bistveno spremeniti osnovo kode. Modularnost je leta 2014 omogočila zamenjavo mehanizma YARR RegExp, ki je bil prvotno uporabljen v Firefoxu, z razcepom mehanizma Irregexp iz V8. Irregexp je vezan na API V8, vezan na zbiralnik smeti in uporablja predstavitev niza in objektni model, specifičen za V8. V procesu prilagajanja internemu API-ju SpiderMonkey leta 2014 je bil mehanizem Irregexp delno prepisan in nastajajoče spremembe, kot je zastavica '\u', kjer je bilo mogoče preneseno v fork, ki ga vzdržuje Mozilla.

Na žalost je vzdrževanje sinhroniziranih vilic težko in zahteva veliko virov. S pojavom novih funkcij, povezanih z regularnimi izrazi v standardu ECMAScript 2018, so Mozillini razvijalci razmišljali o tem, kako olajšati selitev sprememb iz Irregexp. Kot izhod je bil predlagan koncept zavijanja, ki omogoča uporabo skoraj nespremenjenega mehanizma Irregexp v SpiderMonkey (spremembe so zmanjšane le na samodejno zamenjavo blokov »#include«).

Mozilla je s Chromiumom prešla na uporabo skupnega mehanizma regularnih izrazov

Ogrodje zagotavlja Irregexpu potrebne zmožnosti, specifične za V8, vključno z upravljanjem pomnilnika in funkcijami za generiranje kode, kot tudi izvorne podatkovne strukture, ki so implementirane z uporabo mehanizmov za upravljanje pomnilnika, generatorjev kode in struktur SpiderMonkey.

Posodobitev mehanizma RegExp bo Firefoxu omogočila podporo funkcij, kot so imenovani zajemi, ubežanje razreda znakov Unicode, zastavica dotAll in način Lookbehind:

  • Poimenovane skupine vam omogočajo, da povežete dele niza, ki se ujema z regularnim izrazom, z določenimi imeni namesto z zaporednimi številkami ujemanja (na primer namesto “/(\d{4})-(\d{2})-(\d{ 2})/” lahko določite “/( ? \d{4})-(? \d{2})-(? \d{2})/" in do leta ne dostopajte prek rezultata[1], ampak prek rezultata.skupine.leto).
  • Pobeg od pouka Znaki Unicode dodajajo konstrukciji \p{...} in \P{...}, na primer \p{Number} definira vse možne znake s številkami (vključno s simboli, kot je ①), \p{Alphabetic} - črke (vključno hieroglifi ), \p{Math} — matematični simboli itd.
  • Zastava dotAll povzroči sprožitev maske ».«. vključno z znaki za premik vrstice.
  • Način Poglej nazaj vam omogoča, da v regularnem izrazu določite, da je en vzorec pred drugim (na primer ujemanje zneska v dolarjih brez zajemanja znaka za dolar).

Projekt je bil izveden s sodelovanjem razvijalcev V8, ki so si s svoje strani prizadevali zmanjšati odvisnost Irregexpa od V8 in nekatere funkcije, ki jih ni mogoče implementirati s SpiderMonkey, premaknili v onemogočene bloke »#ifdef«. Sodelovanje se je izkazalo za obojestransko koristno. Mozillini razvijalci pa so predložili spremembe Irregexpu, ki nekatere odpravljajo nedoslednosti z zahtevami standarda JavaScript in izboljšanje kakovost kode. Prav tako so bile med testiranjem fuzzinga Firefoxa identificirane in odpravljene prej neopažene napake v kodi Irregexp, ki so vodile do zrušitev.

Vir: opennet.ru

Dodaj komentar