Mozilla gikk over til å bruke en vanlig regulært uttrykksmotor med Chromium

SpiderMonkey JavaScript-motor brukt i Firefox overført å bruke en oppdatert implementering av regulære uttrykk basert på gjeldende kode Irregexp fra V8 JavaScript-motoren som brukes i nettlesere basert på Chromium-prosjektet. Den nye implementeringen av RegExp vil bli tilbudt i Firefox 78, planlagt til 30. juni, og vil bringe alle de manglende ECMAScript-elementene relatert til regulære uttrykk til nettleseren.

Det bemerkes at RegExp-motoren i SpiderMonkey er utformet som en egen komponent, noe som gjør den relativt uavhengig og egnet for utskifting uten behov for å gjøre vesentlige endringer i kodebasen. Modularitet gjorde det mulig i 2014 å erstatte YARR RegExp-motoren som opprinnelig ble brukt i Firefox med en gaffel av Irregexp-motoren fra V8. Irregexp er knyttet til V8 API, knyttet til søppelsamleren, og bruker en V8-spesifikk strengrepresentasjon og objektmodell. I prosessen med å tilpasse seg SpiderMonkeys interne API i 2014, ble Irregexp-motoren delvis omskrevet, og nye endringer, som «\u»-flagget, der det var mulig overført inn i en gaffel vedlikeholdt av Mozilla.

Dessverre er det vanskelig og ressurskrevende å opprettholde en synkronisert gaffel. Med bruken av nye funksjoner knyttet til regulære uttrykk i ECMAScript 2018-standarden, tenkte Mozilla-utviklere på hvordan de kunne gjøre det enklere å migrere endringer fra Irregexp. Som en vei ut ble et innpakningskonsept foreslått, som gjør det mulig å bruke den nesten uendrede Irregexp-motoren i SpiderMonkey (endringene reduseres kun til automatisk erstatning av "#inkluder"-blokker).

Mozilla gikk over til å bruke en vanlig regulært uttrykksmotor med Chromium

Rammeverket gir Irregexp de nødvendige V8-spesifikke egenskapene, inkludert minneadministrasjon og kodegenereringsfunksjoner, samt native datastrukturer som er implementert ved hjelp av minneadministrasjonsmotorer, kodegeneratorer og SpiderMonkey-strukturer.

Oppdatering av RegExp-motoren vil tillate Firefox å støtte funksjoner som navngitte fangst, Unicode-tegnklasse-escape, dotAll-flagget og Lookbehind-modus:

  • Navngitte grupper lar deg assosiere deler av en streng som samsvarer med et regulært uttrykk med spesifikke navn i stedet for serienumre av samsvar (for eksempel i stedet for "/(\d{4})-(\d{2})-(\d{ 2})/” kan du spesifisere “/( ? \d{4})-(? \d{2})-(? \d{2})/" og få tilgang til året ikke gjennom resultat[1], men gjennom resultat.grupper.år).
  • Unngå klasser Unicode-tegn legger til konstruksjoner \p{...} og \P{...}, for eksempel definerer \p{Number} alle mulige tegn som viser tall (inkludert tegn som ①), \p{Alphabetic} - bokstaver (inkludert hieroglyfer ), \p{Matematisk} — matematiske symboler osv.
  • flagg dotAll får "."-masken til å avfyres. inkludert linjeskifttegn.
  • regime Se bak lar deg bestemme i et regulært uttrykk at ett mønster går foran et annet (for eksempel matche et dollarbeløp uten å fange opp dollartegnet).

Prosjektet ble utført med deltakelse av V8-utviklere, som på sin side jobbet for å redusere avhengigheten av Irregexp av V8, og flyttet noen funksjoner som ikke kan implementeres ved hjelp av SpiderMonkey til deaktiverte «#ifdef»-blokker. Samarbeidet viste seg å være gjensidig fordelaktig. Mozilla-utviklere sendte på sin side inn endringer til Irregexp som eliminerer noen inkonsekvenser med kravene til JavaScript-standarden og forbedres kodekvalitet. Under uklar testing av Firefox ble også tidligere ubemerket feil i Irregexp-koden som førte til krasj identifisert og eliminert.

Kilde: opennet.ru

Legg til en kommentar