Mozilla ha adottato un motore di espressioni regolari comune con Chromium

Il motore JavaScript utilizzato in Firefox è SpiderMonkey tradotto alla nuova implementazione delle espressioni regolari, basata sul codice aggiornato Irregexp dal motore JavaScript V8, utilizzato nei browser basati sul progetto Chromium. La nuova implementazione di RegExp sarà introdotta nella versione di Firefox 78, prevista per il 30 giugno, e permetterà di implementare nel browser tutti gli elementi ECMAScript mancanti relativi alle espressioni regolari.

Si segnala che il motore RegExp in SpiderMonkey è strutturato come un componente separato, rendendolo relativamente indipendente e adatto a essere sostituito senza la necessità di apportare modifiche significative alla base di codice. La modularità ha consentito nel 2014 di sostituire il motore RegExp YARR originariamente utilizzato in Firefox con un fork del motore Irregexp da V8. Irregexp è legato all'API di V8, si collega al garbage collector, utilizza rappresentazioni di stringhe e modelli di oggetti specifici di V8. Durante il processo di adattamento all'API interna di SpiderMonkey nel 2014, il motore Irregexp è stato parzialmente riscritto, e le modifiche che si presentano, come il flag '\u', sono state trasferite nel ramo supportato da Mozilla. in un'implementazione supportata da Mozilla.

Sfortunatamente, mantenere un fork sincronizzato è un compito difficile e richiede molte risorse. Con l'introduzione di nuove funzionalità relative alle espressioni regolari nello standard ECMAScript 2018, gli sviluppatori di Mozilla hanno riflettuto su come semplificare il trasferimento di modifiche da Irregexp. Come soluzione, è stata proposta la concezione di un wrapper, che consente di utilizzare in SpiderMonkey il motore Irregexp quasi invariato (le modifiche si limitano alla sostituzione automatica dei blocchi "#include").

Mozilla ha adottato un motore di espressioni regolari comune con Chromium

Il wrapper fornisce a Irregexp le necessarie funzionalità specifiche di V8, tra cui funzioni di gestione della memoria e generazione del codice, così come le strutture dati originali, realizzate utilizzando meccanismi di gestione della memoria, generatori di codice e strutture di SpiderMonkey.

L'aggiornamento del motore RegExp permetterà di garantire in Firefox il supporto per funzionalità come gruppi nominati (named captures), escape delle classi di caratteri Unicode, il flag dotAll e la modalità Lookbehind:

  • Gruppi nominati consentono di associare parti di una stringa corrispondenti a espressioni regolari a nomi specifici invece che a numeri ordinali di corrispondenze (ad esempio, invece di «/(\d{4})-(\d{2})-(\d{2})/» si può usare «/(?\d{4})-(?\d{2})-(?\d{2})/» e accedere all'anno non tramite result[1], ma tramite result.groups.year).
  • Escape dei classi I caratteri Unicode aggiungono le costrzioni \p{…} e \P{…}, ad esempio, \p{Number} definisce tutti i possibili simboli rappresentanti numeri (inclusi simboli come ①), \p{Alphabetic} — lettere (compresi i geroglifici), \p{Math} — simboli matematici, ecc.
  • Flag dotAll fa sì che la maschera «.» corrisponda anche ai caratteri di nuova riga.
  • Modalità Lookbehind consente di definire in un'espressione regolare che un modello precede un altro (ad esempio, corrispondere a un importo in dollari senza catturare il simbolo del dollaro).

Il progetto è stato realizzato con la partecipazione degli sviluppatori di V8, che hanno lavorato per ridurre la dipendenza di Irregexp da V8, e hanno trasferito alcune funzionalità che non possono essere realizzate su SpiderMonkey in blocchi disattivabili «#ifdef». La collaborazione si è rivelata reciprocamente vantaggiosa. Da parte loro, gli sviluppatori di Mozilla hanno integrato in Irregexp modifiche che risolvono alcune incongruenze rispetto ai requisiti dello standard JavaScript e migliorano la qualità del codice. Inoltre, durante i test di fuzzing di Firefox sono stati individuati e corretti errori precedentemente non rilevati nel codice di Irregexp, che portavano a crash.

Fonte: opennet.ru

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster