Motori i JavaScript-it të përdorur në Firefox, SpiderMonkey në përdorimin e një implementimi të ri të shprehjeve të zakonshme, të bazuar në kodin aktual nga motori JavaScript V8, i përdorur në shfletuesit që bazohen në projektin Chromium. Implementimi i ri i RegExp do të prezantohet në versionin Firefox 78, i parashikuar më 30 qershor, dhe do të lejojë realizimin në shfletues të të gjitha elementeve të munguar ECMAScript që lidhen me shprehjet e zakonshme.
VĂ«rehet se motori RegExp nĂ« SpiderMonkey Ă«shtĂ« organizuar si njĂ« komponent i veçantĂ«, çka e bĂ«n atĂ« relativisht tĂ« pavarur dhe tĂ« pĂ«rshtatshĂ«m pĂ«r zĂ«vendĂ«sim pa pasur nevojĂ« pĂ«r ndryshime tĂ« rĂ«ndĂ«sishme nĂ« bazĂ«n e kodit. Modularity i mundĂ«soi nĂ« vitin 2014 zĂ«vendĂ«simin e motorit tĂ« parĂ« RegExp YARR tĂ« pĂ«rdorur nĂ« Firefox me njĂ« fork nga motori Irregexp i V8. Irregexp Ă«shtĂ« i lidhur me API-nĂ« e V8, i lidhur me mbledhĂ«sin e plehrave, pĂ«rdor njĂ« pĂ«rfaqĂ«sim specifik pĂ«r V8 tĂ« vargjeve dhe modelin e objekteve. GjatĂ« procesit tĂ« adaptimit nĂ« API-nĂ« e brendshme SpiderMonkey nĂ« vitin 2014, motori Irregexp u rishkrua pjesĂ«risht, dhe ndryshimet qĂ« shfaqeshin, si flag â\uâ, pĂ«r sa tĂ« jetĂ« e mundur nĂ« njĂ« degĂ« tĂ« mbĂ«shtetur nga Mozilla.
Fatkeqësisht, mbajtja e një forke të sinkronizuar është një detyrë e vështirë dhe mbështetja e saj kërkon shumë burime. Me paraqitjen e mundësive të reja në standardin ECMAScript 2018 në lidhje me shprehjet e rregullta, zhvilluesit e Mozilla menduan se si mund të lehtësohet transferimi i ndryshimeve nga Irregexp. Si zgjidhje, u propozua koncepti i përshtatjes, i cili lejon përdorimin në SpiderMonkey të motorit Irregexp pothuajse pa ndryshime (ndryshimet reduktohen vetëm në zëvendësimin automatik të blloqeve «#include»).
Përshtatja ofron për Irregexp funksionalitetet e nevojshme specifike të V8, duke përfshirë funksionet e menaxhimit të memories dhe gjenerimin e kodit, si dhe strukturat origjinale të të dhënave, të cilat janë implementuar mbi mekanizmat e 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 me emra (named captures), ekranuar klasat e simboleve Unicode, flag dotAll dhe mënyra Lookbehind:
- lejojnë lidhjen e pjesëve të rreshtit të përputhura me shprehje të rregullta me emra të caktuar në vend të numrave të rendit të përputhjes (p.sh., në vend të «/(\d{4})-(\d{2})-(\d{2})/» mund të përdoret «/(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})/» dhe të aksesosh vitin jo përmes result[1], por përmes result.groups.year).
- Simbolet Unicode shtojnĂ« konstruksione \p{âŠ} dhe \P{âŠ}, pĂ«r shembull, \p{Number} pĂ«rcakton tĂ« gjithĂ« shenjat e mundshme me pamje digjitale (pĂ«rfshirĂ« simbolet si â ), \p{Alphabetic} â shkronjat (pĂ«rfshirĂ« hieroglifet), \p{Math} â simbolet matematikore etj.
- Flamuri çon në aktivizimin e maskës «.» përfshirë simbolet e ndërrimit të rreshtit.
- ReĆŸimi lejon pĂ«rcaktimin nĂ« shprehjen e rregullt se njĂ« model i caktuar e paraprin njĂ« tjetĂ«r (p.sh., pĂ«r tĂ« pĂ«rputhur shumĂ«n nĂ« dollarĂ« pa kapur shenjĂ«n e 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 transferuan disa veçori që nuk mund të implementohen mbi bazën e SpiderMonkey në blloqet e çaktivizuara «#ifdef». Bashkëpunimi rezultoi të ishte në të dyja palët e favorshme. Nga ana e tyre, zhvilluesit e Mozilla kaluan në Irregexp ndryshime që eliminojnë disa me kërkesat e standardit JavaScript dhe cilësinë e kodit. Gjithashtu, gjatë testimit fuzzing të Firefox, ishin identifikuar dhe eliminuar gabime të mëparshme të paobservuara në kodin Irregexp, që çonin në kthesa.
Burimi: opennet.ru
