Mozilla je prešla na korištenje uobičajenog mehanizma regularnih izraza s Chromiumom

SpiderMonkey JavaScript mehanizam koji se koristi u Firefoxu prenijeti koristiti ažuriranu implementaciju regularnih izraza na temelju trenutnog koda Irregexp iz V8 JavaScript motora koji se koristi u preglednicima koji se temelje na projektu Chromium. Nova implementacija RegExpa bit će ponuđena u Firefoxu 78, zakazana za 30. lipnja, i donijet će sve nedostajuće ECMAScript elemente koji se odnose na regularne izraze u preglednik.

Napominje se da je RegExp motor u SpiderMonkeyju dizajniran kao zasebna komponenta, što ga čini relativno neovisnim i prikladnim za zamjenu bez potrebe za značajnijim izmjenama baze koda. Modularnost je 2014. godine omogućila zamjenu YARR RegExp motora koji se izvorno koristio u Firefoxu račvanjem Irregexp motora iz V8. Irregexp je vezan za V8 API, vezan za sakupljač smeća i koristi V8 specifičnu reprezentaciju niza i objektni model. U procesu prilagodbe internom API-ju SpiderMonkeya 2014., Irregexp mehanizam je djelomično prepisan, a nove promjene, kao što je zastavica '\u', gdje je to bilo moguće prenijeti u fork koji održava Mozilla.

Nažalost, održavanje sinkronizirane vilice je teško i zahtijeva mnogo resursa. S pojavom novih značajki povezanih s regularnim izrazima u standardu ECMAScript 2018, Mozilla programeri razmišljali su o tome kako olakšati migraciju promjena iz Irregexp-a. Kao izlaz predložen je koncept omatanja koji omogućuje korištenje gotovo nepromijenjenog Irregexp motora u SpiderMonkey (promjene su svedene samo na automatsku zamjenu blokova "#include").

Mozilla je prešla na korištenje uobičajenog mehanizma regularnih izraza s Chromiumom

Okvir pruža Irregexpu potrebne mogućnosti specifične za V8, uključujući upravljanje memorijom i funkcije generiranja koda, kao i izvorne podatkovne strukture koje se implementiraju pomoću mehanizama za upravljanje memorijom, generatora koda i SpiderMonkey struktura.

Ažuriranje mehanizma RegExp omogućit će Firefoxu da podržava značajke kao što su imenovana snimanja, izbjegavanje klase Unicode znakova, zastavica dotAll i način Lookbehind:

  • Imenovane grupe omogućuju vam da pridružite dijelove niza koji se podudaraju s regularnim izrazom s određenim imenima umjesto serijskim brojevima podudaranja (na primjer, umjesto “/(\d{4})-(\d{2})-(\d{ 2})/” možete navesti “/( ? \d{4})-(? \d{2})-(? \d{2})/" i pristupite godini ne kroz rezultat[1], već kroz rezultat.grupe.godina).
  • Bježanje s nastave Unicode znakovi dodaju konstrukcije \p{...} i \P{...}, na primjer, \p{Number} definira sve moguće znakove koji prikazuju brojeve (uključujući znakove poput ①), \p{Alphabetic} - slova (uključujući hijeroglifi ), \p{Math} — matematički simboli itd.
  • zastava točkaSve uzrokuje paljenje maske "." uključujući znakove za novi redak.
  • režim Pogledaj iza omogućuje vam da u regularnom izrazu odredite da jedan uzorak prethodi drugom (na primjer, podudaranje iznosa u dolarima bez hvatanja znaka dolara).

Projekt je proveden uz sudjelovanje programera V8, koji su sa svoje strane radili na smanjenju ovisnosti Irregexpa o V8 i premjestili neke značajke koje se ne mogu implementirati na temelju SpiderMonkeyja u blokove onemogućavanja "#ifdef". Suradnja se pokazala obostrano korisnom. Sa svoje strane, programeri Mozille poslali su izmjene u Irregexp koje eliminiraju neke nedosljednosti sa zahtjevima JavaScript standarda i poboljšanje kvaliteta koda. Također, tijekom fuzzing testiranja Firefoxa, identificirane su i eliminirane prethodno neprimijećene greške u kodu Irregexp koje su dovele do rušenja.

Izvor: opennet.ru

Dodajte komentar