Mozilla hat auf die Verwendung einer gemeinsamen RegExp-Engine, die mit Chromium kompatibel ist, umgestellt.

Der in Firefox verwendete JavaScript-Engine SpiderMonkey. übersetzt auf die aktualisierte Implementierung der regulären Ausdrücke, die auf dem aktuellen Code basiert. Irregexp aus der JavaScript-Engine V8, die in Browsern basierend auf dem Chromium-Projekt verwendet wird. Die neue RegExp-Implementierung wird im Firefox 78-Release angeboten, das für den 30. Juni geplant ist, und wird es ermöglichen, alle fehlenden ECMAScript-Elemente, die mit regulären Ausdrücken zusammenhängen, im Browser umzusetzen.

Es wird festgestellt, dass die RegExp-Engine in SpiderMonkey als separates Modul gestaltet ist, was sie relativ unabhängig macht und ohne signifikante Änderungen am Code ersetzt werden kann. Die Modularität ermöglichte es, 2014 die ursprünglich in Firefox verwendete RegExp-Engine YARR durch einen Fork der Irregexp-Engine aus V8 zu ersetzen. Irregexp ist an die V8-API gebunden, arbeitet mit dem Garbage Collector zusammen, nutzt V8-spezifische String-Darstellungen und das Objektmodell. Im Prozess der Anpassung an die interne API von SpiderMonkey wurde die Irregexp-Engine 2014 teilweise neu geschrieben, und auftretende Änderungen wie das Flag '\u' wurden, wo möglich, übertragen. In einem von Mozilla unterstützten Ableger.

Leider ist die Pflege eines synchronisierten Forks eine herausfordernde Aufgabe und erfordert erhebliche Ressourcen. Mit den neuen Möglichkeiten, die der ECMAScript 2018 Standard in Bezug auf reguläre Ausdrücke bietet, haben sich die Entwickler von Mozilla gefragt, wie sie den Transfer von Änderungen aus Irregexp vereinfachen können. Als Lösung wurde ein Konzept für ein Wrapper vorgeschlagen, das es ermöglicht, die nahezu unveränderte Irregexp-Engine in SpiderMonkey zu verwenden (Änderungen beschränken sich lediglich auf die automatische Ersetzung von „#include“-Blöcken).

Mozilla hat auf die Verwendung einer gemeinsamen RegExp-Engine, die mit Chromium kompatibel ist, umgestellt.

Der Wrapper bietet Irregexp die notwendigen spezifischen Funktionen von V8, einschließlich Speicherverwaltungs- und Codegenerierungsfunktionen sowie grundlegenden Datenstrukturen, die auf den Mechanismen der Speicherverwaltung, Codegeneratoren und der Struktur von SpiderMonkey basieren.

Ein Update der RegExp-Engine wird es Firefox ermöglichen, Funktionen wie benannte Gruppen, Escape-Klassen für Unicode-Zeichen, das dotAll-Flag und den Lookbehind-Modus zu unterstützen:

  • Benannte Gruppen ermöglichen es, mit regulären Ausdrücken übereinstimmende Teile einer Zeichenfolge bestimmten Namen zuzuordnen, anstelle von Positionsnummern der Übereinstimmungen (zum Beispiel kann anstelle von „/(\d{4})-(\d{2})-(\d{2})/“ „/(?\d{4})-(?\d{2})-(?\d{2})/“ verwendet werden, um auf das Jahr nicht über result[1], sondern über result.groups.year zuzugreifen).
  • Escape von Klassen Unicode-Zeichen werden durch die Konstruktionen \p{…} und \P{…} hinzugefügt, zum Beispiel definiert \p{Number} alle möglichen Zeichen, die Ziffern darstellen (einschließlich Zeichen wie ①), \p{Alphabetic} – Buchstaben (einschließlich von Hieroglyphen), \p{Math} – mathematische Zeichen usw.
  • Flagge dotAll führt dazu, dass das Muster „.“ auch für Zeilenumbruchzeichen aktiviert wird.
  • Modus Lookbehind ermöglicht es, in einem regulären Ausdruck zu bestimmen, dass ein Muster einem anderen vorausgeht (zum Beispiel kann man einen Betrag in Dollar erfassen, ohne das Dollarzeichen zu erfassen).

Das Projekt wurde mit der Beteiligung der V8-Entwickler umgesetzt, die ihrerseits daran arbeiteten, die Abhängigkeit von Irregexp von V8 zu verringern und einige Eigenschaften, die auf SpiderMonkey nicht umgesetzt werden können, in abschaltbare Abschnitte „#ifdef“ zu verlagern. Die Zusammenarbeit war für beide Seiten vorteilhaft. Von ihrer Seite übergaben die Entwickler von Mozilla Änderungen an Irregexp, die einige Unstimmigkeiten mit den Anforderungen des JavaScript-Standards beseitigen und die Codequalität verbessern. Zudem wurden während der Fuzzing-Tests von Firefox zuvor unentdeckte Fehler im Code von Irregexp gefunden und behoben, die zu Abstürzen führten.

Quelle: opennet.ru

Erwerben Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server 🔥 Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server | ProHoster