Mozilla is overgestapt op het gebruik van een gemeenschappelijke reguliere expressiemotor met Chromium

De in Firefox gebruikte JavaScript-engine SpiderMonkey vertaald op het gebruik van een bijgewerkte implementatie van reguliere expressies, gebaseerd op actuele code Irregexp uit de JavaScript-engine V8, die wordt gebruikt in browsers op basis van het Chromium-project. De nieuwe implementatie van RegExp zal worden aangeboden in de release van Firefox 78, gepland voor 30 juni, en zorgt ervoor dat de browser alle ontbrekende ECMAScript-elementen met betrekking tot reguliere expressies implementeert.

Het wordt opgemerkt dat de RegExp-engine in SpiderMonkey is ontworpen als een afzonderlijk component, waardoor deze relatieve onafhankelijkheid heeft en kan worden vervangen zonder dat er significante wijzigingen in de codebasis nodig zijn. De modulariteit maakte het mogelijk om in 2014 de oorspronkelijk gebruikte RegExp-engine YARR in Firefox te vervangen door een fork van de Irregexp-engine uit V8. Irregexp is gekoppeld aan de V8 API, gekoppeld aan de garbage collector en maakt gebruik van V8-specifieke stringrepresentaties en objectmodellen. Tijdens de aanpassing aan de interne SpiderMonkey API in 2014 is de Irregexp-engine gedeeltelijk herschreven, en nieuwe wijzigingen, zoals de vlag ‘\u’, zijn waar mogelijk overgebracht naar de tak die door Mozilla wordt ondersteund.

Helaas is het onderhouden van een gesynchroniseerde fork een moeilijke taak en vereist het veel middelen om te beheren. Met de nieuwe mogelijkheden op het gebied van reguliere expressies in de ECMAScript 2018-standaard, hebben de ontwikkelaars van Mozilla nagedacht over hoe ze het mogelijk kunnen maken om wijzigingen uit Irregexp te vereenvoudigen. Als oplossing werd het concept van een wrapper voorgesteld, waarmee bijna onveranderde Irregexp kan worden gebruikt in SpiderMonkey (de wijzigingen beperken zich tot automatische vervangingen van ‘#include’-blokken).

Mozilla is overgestapt op het gebruik van een gemeenschappelijke reguliere expressiemotor met Chromium

De wrapper biedt voor Irregexp de noodzakelijke V8-specifieke mogelijkheden, inclusief geheugenbeheer en codegeneratiefuncties, evenals de oorspronkelijke datastructuren die zijn gerealiseerd op basis van geheugenbeheermethoden, codegeneratoren en structuren van SpiderMonkey.

De update van de RegExp-engine zal in Firefox ondersteuning bieden voor mogelijkheden zoals genummerde groepen (named captures), Unicode-tekenklasse-escapes, de dotAll-vlag en Lookbehind-modus:

  • Genummerde groepen maakt het mogelijk om met reguliere expressies overeenkomende delen van een tekenreeks aan specifieke namen te koppelen in plaats van aan de volgnummer van overeenkomsten (bijvoorbeeld in plaats van "/(\d{4})-(\d{2})-(\d{2})/" kan "/(?\d{4})-(?\d{2})-(?\d{2})/" worden opgegeven en toegang krijgen tot het jaar niet via result[1], maar via result.groups.year).
  • Escapen van klassen Unicode-symbolen toevoegen constructies \p{…} en \P{…}, bijvoorbeeld \p{Number} definieert alle mogelijke tekens die cijfers weergeven (inclusief symbolen zoals ①), \p{Alphabetic} — letters (inclusief hiërogliefen), \p{Math} — wiskundige symbolen, enz.
  • Vlag dotAll leidt ertoe dat het masker "." ook wordt geactiveerd voor regeleinde-symbolen.
  • Modus Lookbehind maakt het mogelijk om in een reguliere expressie te bepalen dat een patroon voorafgaat aan een ander (bijvoorbeeld een bedrag in dollars matchen zonder het dollarteken te vangen).

Het project werd uitgevoerd met medewerking van V8-ontwikkelaars, die op hun beurt werk hebben verricht om de afhankelijkheid van Irregexp van V8 te verkleinen, en enkele kenmerken die niet kunnen worden geïmplementeerd op basis van SpiderMonkey, in uitschakelbare blokken "#ifdef" hebben geplaatst. De samenwerking bleek wederzijds voordelig. Aan hun kant hebben Mozilla-ontwikkelaars veranderingen aan Irregexp doorgegeven die enkele inconsistenties met de eisen van de JavaScript-standaard en de kwaliteit van de code verbeteren. Ook tijdens fuzzing-tests van Firefox zijn eerder niet opgemerkte fouten in de code van Irregexp ontdekt en verholpen, wat leidde tot crashes. de kwaliteit van de code. Tijdens de fuzzing-testen van Firefox zijn ook eerder onopgemerkte fouten in de Irregexp-code ontdekt en verholpen, die tot crashes leidden.

Bron: opennet.ru

Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers 🔥 Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers | ProHoster