Mozilla kaloi në përdorimin e motorit të zakonshëm të shprehjeve të rregullta me Chromium

Motori JavaScript SpiderMonkey i përdorur në Firefox është kaluar për përdorimin e një zbatimi të përditësuar të shprehjeve të rregullta, i bazuar në kodin aktual Irregexp nga motori JavaScript V8, i përdorur në shfletuesit bazuar në projektin Chromium. Zbatimi i ri i RegExp do të propozohet në lëshimin e Firefox 78, i planifikuar për 30 qershor, dhe do të mundësojë zbatimin në shfletues të të gjithë elementeve të munguar të ECMAScript, të lidhura me shprehjet e rregullta.

Vlen të theksohet se motori RegExp në SpiderMonkey është i dizajnuar si një komponent i veçantë, që e bën atë relativisht të pavarur dhe të përshtatshëm për zëvendësim pa pasur nevojë për ndryshime të mëdha në kodin burimor. Modulorizimi lejoj që në 2014 të zëvendësohej motori fillestar i RegExp i përdorur në Firefox, YARR, me një fork të motorit Irregexp nga V8. Irregexp është i lidhur me API-në V8, i lidhur me mbledhësin e plehrave, përdor paraqitje specifike të V8 për strings dhe një model objektesh. Gjatë procesit të adaptimit në API-në e brendshme të SpiderMonkey në vitin 2014, motori Irregexp u rishkrua pjesërisht, dhe ndryshimet e shfaqura, të tilla si flag'u '\u', për sa mundet u transferuan në një degë të mbështetur nga Mozilla.

Fatkeqësisht, mbajtja e një fork të sinkronizuar është një detyrë e vështirë dhe mbështetje e saj kërkon burime të mëdha. Me shfaqjen e mundësive të reja në standardin ECMAScript 2018, të lidhura me shprehjet e rregullta, zhvilluesit e Mozilla po mendonin se si mund të thjeshtojnë transferimin e ndryshimeve nga Irregexp. Si një zgjidhje u propozua koncepti i mbështetjes, që lejon përdorimin në SpiderMonkey të motorit Irregexp pothuajse pa ndryshime (ndryshimet reduktohen vetëm në zëvendësimin automatik të blloqeve '#include').

Mozilla kaloi në përdorimin e motorit të zakonshëm të shprehjeve të rregullta me Chromium

Mbështetja siguron për Irregexp funksionalitetet specifike të nevojshme të V8, duke përfshirë funksione të menaxhimit të memories dhe gjenerimit të kodit, si dhe struktura të dhënash burimore, të cilat janë realizuar në bazë të mekanizmave të menaxhimit të memories, gjeneratorëve të kodit dhe strukturave të SpiderMonkey.

Përditësimi i motorit RegExp do të mundësojë në Firefox mbështetje për mundësi të tilla si grupet e emëruara (named captures), shmangien e klasave të simboleve Unicode, flag-un dotAll dhe modalitetin Lookbehind:

  • Grupet me emĂ«r lejojnĂ« lidhjen e pjesĂ«ve tĂ« pĂ«rputhura tĂ« vargjeve me emra tĂ« caktuar nĂ« vend tĂ« numrave tĂ« rendit tĂ« pĂ«rputhjeve (pĂ«r shembull, nĂ« vend tĂ« "\d{4}-(\d{2})-(\d{2})" mund tĂ« spekulohet "(?\d{4})-(?\d{2})-(?\d{2})" dhe tĂ« aksesohen vitin jo pĂ«rmes result[1], por pĂ«rmes result.groups.year).
  • Ekranimi i grupeve Simbolet Unicode shtojnĂ« konstrukte \p{
} dhe \P{
}, pĂ«r shembull, \p{Number} pĂ«rcakton tĂ« gjitha shenjat qĂ« paraqesin shifra (duke pĂ«rfshirĂ« simbolet e tilla si ①), \p{Alphabetic} — shkronjat (pĂ«rfshirĂ« hieroglifĂ«t), \p{Math} — simbolet matematikore etj.
  • Flamuri dotAll kishin si rezultat aktivizimin e maskĂ«s “.” pĂ«rfshirĂ« pĂ«r simbolet e kalimit tĂ« rreshtit.
  • Modaliteti Lookbehind lejon pĂ«rcaktimin nĂ« njĂ« shprehje tĂ« rregullt se njĂ« model ia paraprin njĂ« tjetĂ«r (pĂ«r shembull, pĂ«rputhja e shumĂ«s nĂ« dollar pa kapjen e shenjĂ«s sĂ« dollarit).

Projekti u realizua me ndihmën e zhvilluesve V8, të cilët nga ana e tyre punuan për të reduktuar varësinë e Irregexp nga V8, dhe i kaluan disa veçori, të cilat nuk mund të realizoheshin mbi bazën e SpiderMonkey, në blloqet e fikshme "#ifdef". Bashkëpunimi u tregua i favorshëm për të dyja palët. Nga ana e tyre, zhvilluesit e Mozilla i kaluan Irregexp ndryshimet që eliminojnë disa discrepancies me kërkesat e standardit JavaScript dhe përmirësimin e cilësisë së kodit. Gjithashtu, gjatë testimeve fuzzing në Firefox u zbuluan dhe u eliminuan gabime të mëparshme në kodin Irregexp që shkaktonin çarjet.

Burimi: opennet.ru

Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster