Mozilla hat auf die Verwendung der gleichen regulÀren Ausdruck-Motoren wie Chromium umgeschaltet.

Die in Firefox verwendete JavaScript-Engine SpiderMonkey wurde fĂŒr die Verwendung einer aktualisierten Implementierung von regulĂ€ren AusdrĂŒcken, die auf dem aktuellen Code basiert Irregexp aus der JavaScript-Engine V8, die in Browsern verwendet wird, die auf dem Chromium-Projekt basieren. Die neue Implementierung von RegExp wird mit Firefox 78 am 30. Juni vorgestellt und ermöglicht die Implementierung aller fehlenden ECMAScript-Elemente im Zusammenhang mit regulĂ€ren AusdrĂŒcken im Browser.

Es wird festgestellt, dass die RegExp-Engine in SpiderMonkey als separates Modul gestaltet ist, was sie relativ unabhĂ€ngig und austauschbar macht, ohne dass wesentliche Änderungen an der Codebasis erforderlich sind. Die ModularitĂ€t ermöglichte es, die ursprĂŒnglich in Firefox verwendete RegExp-Engine YARR im Jahr 2014 durch einen Fork der Irregexp-Engine aus V8 zu ersetzen. Irregexp ist an die V8-API gebunden, an den Garbage Collector gebunden, verwendet v8-spezifische String-Darstellungen und ein Objektmodell. Im Rahmen der Anpassung an die interne API von SpiderMonkey wurde die Irregexp-Engine im Jahr 2014 teilweise neu geschrieben, wobei neue Änderungen, wie das Flag ‘\u’, soweit möglich ĂŒbertragen wurden in einen von Mozilla unterstĂŒtzten Fork.

Leider ist die Aufrechterhaltung eines synchronisierten Forks eine anspruchsvolle Aufgabe und erfordert erhebliche Ressourcen. Mit den neuen Möglichkeiten, die im ECMAScript-2018-Standard im Zusammenhang mit regulĂ€ren AusdrĂŒcken eingefĂŒhrt wurden, denken die Mozilla-Entwickler darĂŒber nach, wie sie den Transfer von Änderungen aus Irregexp erleichtern können. Als Lösung wurde das Konzept einer Wrapper-Implementierung vorgeschlagen, das es ermöglicht, die Irregexp-Engine in SpiderMonkey nahezu unverĂ€ndert zu verwenden (Änderungen beschrĂ€nken sich nur auf die automatische Ersetzung von „#include“-Blöcken).

Mozilla hat auf die Verwendung der gleichen regulÀren Ausdruck-Motoren wie Chromium umgeschaltet.

Der Wrapper bietet fĂŒr Irregexp die erforderlichen V8-spezifischen Funktionen, einschließlich Speicher- und Codegenerierungssteuerung sowie Quellen von Datenstrukturen, die auf den Mechanismen der Speicherverwaltung, der Codegeneratoren und der Strukturen von SpiderMonkey basieren.

Das Update der RegExp-Engine ermöglicht es Firefox, Funktionen wie benannte Gruppen (named captures), Unicode-Zeichenklassenescapes, das Flag dotAll und den Lookbehind-Modus zu unterstĂŒtzen:

  • Benannte Gruppen ermöglichen es, Teile eines Strings, die mit regulĂ€ren AusdrĂŒcken ĂŒbereinstimmen, bestimmten Namen anstelle von positionsbasierten Übereinstimmungsnummern zuzuordnen (zum Beispiel kann anstelle von "\/(\d{4})-(\d{2})-(\d{2})\/" auch "\/(?\d{4})-(?\d{2})-(?\d{2})\/" angegeben werden, um auf das Jahr nicht ĂŒber result[1], sondern ĂŒber result.groups.year zuzugreifen).
  • Escape-Zeichen fĂŒr 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 Schriftzeichen), \p{Math} – mathematische Symbole usf.
  • Flag dotAll fĂŒhrt dazu, dass das Muster „.“ auch fĂŒr Zeilenumbruchszeichen wirkt.
  • Modus Lookbehind ermöglicht es, in einem regulĂ€ren Ausdruck zu bestimmen, dass ein Muster einem anderen vorausgeht (zum Beispiel einen Betrag in Dollar zuzuordnen, ohne das Dollarzeichen zu erfassen).

Das Projekt wurde in Zusammenarbeit mit den Entwicklern von V8 realisiert, die ihrerseits die AbhĂ€ngigkeit von Irregexp von V8 reduziert und einige Merkmale, die nicht auf der Basis von SpiderMonkey realisierbar sind, in deaktivierbare Blöcke „#ifdef“ ausgegliedert haben. Die Zusammenarbeit war fĂŒr beide Seiten vorteilhaft. Die Entwickler von Mozilla haben im Gegenzug Änderungen an Irregexp ĂŒbergeben, die einige Unstimmigkeiten mit den Anforderungen des JavaScript-Standards beseitigen und die CodequalitĂ€t verbessern. Auch bei Fuzzing-Tests von Firefox wurden zuvor unentdeckte Fehler im Code von Irregexp gefunden und behoben, die zu AbstĂŒrzen fĂŒhrten.

Quelle: opennet.ru

ZuverlĂ€ssiges Hosting fĂŒr Websites mit DDoS-Schutz kaufen, VPS VDS Server đŸ”„ ZuverlĂ€ssiges Hosting fĂŒr Websites mit DDoS-Schutz kaufen, VPS VDS Server - ProHoster