Mozilla a trecut la utilizarea unui motor de expresii regulate comun cu Chromium

Motorul JavaScript utilizat în Firefox, SpiderMonkey a fost tradusă la utilizarea unei implementări actualizate a expresiilor regulate, bazată pe codul actual Irregexp din motorul JavaScript V8, folosit în browsere bazate pe proiectul Chromium. Noua implementare RegExp va fi oferită în versiunea Firefox 78, programată pentru 30 iunie, și va permite browserului să implementeze toate elementele lipsă ECMAScript legate de expresiile regulate.

Se remarcă faptul că motorul RegExp din SpiderMonkey este structurat ca un component separat, ceea ce îl face relativ independent și potrivit pentru înlocuire fără a necesita modificări semnificative în codul sursă. Modularitatea a permis, în 2014, înlocuirea motorului RegExp YARR inițial utilizat în Firefox cu un fork al motorului Irregexp din V8. Irregexp depinde de API-ul V8, este legat de colectorul de gunoi, folosește reprezentări de șiruri și modele de obiecte specifice V8. În procesul de adaptare la API-ul intern SpiderMonkey în 2014, motorul Irregexp a fost parțial rescris, iar modificările apărute, cum ar fi flag-ul ‘\u’, au fost în măsura posibilului transferate în ramura susținută de Mozilla.

Din păcate, menținerea unui fork sincronizat este o sarcină dificilă și întreținerea sa necesită resurse mari. Odată cu apariția noilor funcționalități legate de expresiile regulate în standardul ECMAScript 2018, dezvoltatorii Mozilla s-au gândit cum ar putea simplifica transferul modificărilor din Irregexp. Ca soluție, a fost propusă concepția de legare, care permite utilizarea în SpiderMonkey a motorului Irregexp aproape nemodificat (modificările sunt reduse doar la înlocuirea automată a blocurilor „#include”).

Mozilla a trecut la utilizarea unui motor de expresii regulate comun cu Chromium

Legătura oferă pentru Irregexp funcționalitățile specifice necesare V8, inclusiv funcții de gestionare a memoriei și generare de cod, precum și structuri de date originale, care sunt implementate pe baza mecanismelor de gestionare a memoriei, generatorilor de cod și structurilor SpiderMonkey.

Actualizarea motorului RegExp va asigura în Firefox suport pentru funcționalități precum grupuri numite (named captures), escaparea claselor de caractere Unicode, flag-ul dotAll și modul Lookbehind:

  • Grupurile numite permit asocierea părților de șir de caractere potrivite cu expresia regulată cu nume specifice, în loc de numerele ordinale ale potrivirilor (de exemplu, în loc de „/(\d{4})-(\d{2})-(\d{2})/” se poate specifica „/(?\d{4})-(?\d{2})-(?\d{2})/” și se poate accesa anul nu prin result[1], ci prin result.groups.year).
  • Scăparea claselor simbolurilor Unicode adaugă structuri \p{…} și \P{…}, de exemplu, \p{Number} definește toate posibilele caractere care reprezintă cifre (inclusiv simboluri de tip ①), \p{Alphabetic} – litere (inclusiv hieroglife), \p{Math} – simboluri matematice etc.
  • Steagul dotAll duce la activarea măștii „.” inclusiv pentru caracterele de sfârșit de linie.
  • Modul Lookbehind permite definirea într-o expresie regulată astfel încât un șablon să preceadă altul (de exemplu, a potrivi o sumă în dolari fără a captura simbolul dolarului).

Proiectul a fost realizat cu participarea dezvoltatorilor V8, care au lucrat la reducerea dependenței Irregexp de V8 și au mutat anumite caracteristici, imposibil de implementat pe baza SpiderMonkey, în blocuri dezactivabile «#ifdef». Colaborarea s-a dovedit a fi reciproc avantajoasă. Din partea lor, dezvoltatorii Mozilla au transmis în Irregexp modificări care elimină anumite incompatibilități cu cerințele standardului JavaScript și îmbunătățesc calitatea codului. De asemenea, în timpul testării fuzzing a Firefox au fost identificate și corectate erori anterioare în codul Irregexp care duceau la blocaje.

Sursa: opennet.ro

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster