Mozilla je prešla na korištenje uobičajenog mehanizma regularnog izraza sa Chromiumom

Firefoxov SpiderMonkey JavaScript motor prevedeno da koristite ažuriranu implementaciju regularnih izraza na osnovu trenutnog koda Irregexp iz V8 JavaScript motora koji se koristi u pretraživačima baziranim na Chromium projektu. Nova implementacija RegExp-a biće predložena u izdanju Firefoxa 78 od 30. juna i omogućiće pretraživaču da implementira sve nedostajuće ECMAScript elemente koji se odnose na regularne izraze.

Napominje se da je RegExp motor u SpiderMonkey-u dizajniran kao posebna komponenta, što ga čini relativno neovisnim i pogodnim za zamjenu bez potrebe za značajnim promjenama u bazi koda. Modularnost je omogućila 2014. da zamijeni YARR RegExp motor koji je prvobitno korišten u Firefoxu sa viljuškom Irregexp motora iz V8. Irregexp je vezan za V8 API, vezan za sakupljač smeća, koristi reprezentaciju stringova specifičnu za V8 i objektni model. U procesu prilagođavanja internom API-ju SpiderMonkey-a 2014. godine, Irregexp engine je djelomično prepisan, a promjene koje se pojavljuju, kao što je '\u' zastavica, gdje je to moguće izdržao na viljušku koju održava Mozilla.

Nažalost, održavanje sinkronizirane vilice je teško i zahtijeva puno resursa za održavanje. Sa uvođenjem novih funkcija vezanih za regularne izraze u standardu ECMAScript 2018, Mozilla programeri su počeli razmišljati o tome kako bi lako mogli prenijeti promjene iz Irregexpa. Kao izlaz, predložen je koncept povezivanja koji omogućava korištenje gotovo nepromijenjenog Irregexp motora u SpiderMonkeyju (promjene se svode samo na automatsku zamjenu blokova "#include").

Mozilla je prešla na korištenje uobičajenog mehanizma regularnog izraza sa Chromiumom

Povezivanje pruža Irregexp-u neophodne karakteristike specifične za V8, uključujući upravljanje memorijom i funkcije generisanja koda, kao i početne strukture podataka koje se implementiraju na osnovu mehanizama za upravljanje memorijom, generatora koda i SpiderMonkey struktura.

Ažuriranje RegExp motora omogućit će Firefoxu da podrži funkcije kao što su imenovana snimanja, izbjegavanje Unicode klasa znakova, dotAll zastavica i Lookbehind mod:

  • Imenovane grupe omogućavaju vam da povežete dijelove niza koji se podudaraju sa regularnim izrazom sa određenim imenima umjesto serijskim brojevima podudaranja (na primjer, umjesto "/(\d{4})-(\d{2})-(\d{ 2})/" možete odrediti "/( ? \d{4})-(? \d{2})-(? \d{2})/" i pristupiti godini ne preko rezultata[1], već preko rezultata.groups.year).
  • Izbjegavanje nastave Unicode znakovi dodaju \p{…} i \P{…} konstrukcije, na primjer, \p{Broj} definiše sve moguće znakove sa slikom brojeva (uključujući znakove kao što je ①), \p{Alphabetic} - slova (uključujući hijeroglifi), \p{Math} — matematički simboli, itd.
  • Zastava dotAll uzrokuje masku "." uključujući znakove novog reda.
  • Režim Pogledaj iza omogućava vam da u regularnom izrazu odredite da jedan obrazac prethodi drugom (na primjer, uparite iznos u dolarima bez hvatanja znaka dolara).

Projekat je implementiran uz učešće V8 programera, koji su sa svoje strane radili na smanjenju zavisnosti Irregexp-a o V8, i premestili neke karakteristike koje se ne mogu implementirati na SpiderMonkey-u u onemogućene "#ifdef" blokove. Pokazalo se da je saradnja obostrano korisna. Sa svoje strane, Mozilla programeri su podnijeli izmjene Irregexp-u koje neke eliminišu nedoslednosti sa zahtjevima JavaScript standarda i poboljšanje kvaliteta koda. Takođe, tokom fuzzing testiranja Firefox-a, identifikovane su i ispravljene ranije neprimećene greške u Irregexp kodu koje su dovele do pada.

izvor: opennet.ru

Dodajte komentar