A Mozilla átállt a Chromium motorral közös reguláris kifejezések használatára

A Firefox által használt JavaScript-motor, a SpiderMonkey a cgroups-v2 egységes hierarchiájának alapértelmezett használatára. Eddig a hibrid mód volt az alapértelmezett beállítás (a systemd «-Ddefault-hierarchy=hybrid» kapcsolóval lett összeállítva); a naprakész kód alapján alapuló frissített reguláris kifejezések alkalmazására Irregexp a Chromium-alapú böngészőkben használt V8 JavaScript-motorból. Az új RegExp megoldást a Firefox 78-as kiadásában fogják bemutatni, amely június 30-án esedékes, és lehetővé teszi az összes hiányzó ECMAScript elemet a reguláris kifejezésekkel kapcsolatban a böngészőben.

Megjegyzik, hogy a SpiderMonkey RegExp motorja önálló komponensként van kialakítva, ami viszonylag függetlenné teszi, és lehetővé teszi a cserét anélkül, hogy jelentős változtatásokat kellene végezni a kód bázisában. A modularitás lehetővé tette, hogy 2014-ben az eredetileg használt Firefox RegExp motorját, a YARR-t, a V8 Irregexp motorjának forkjára cseréljük. Az Irregexp a V8 API-ra épül, a szemétgyűjtőhöz van kötve, és V8-specifikus string- és objektummodelleket használ. Az Irregexp SpiderMonkey belső API-jához való alkalmazkodása során 2014-ben a motort részben átírták, és a megjelenő változásokat, mint például a '\u' jelzőt, lehetőség szerint átvittek a Mozilla által támogatott ágba.

Sajnos egy szinkronizált fork fenntartása nehéz feladat, és annak karbantartása nagy erőforrásokat igényel. Az ECMAScript 2018 szabványban a reguláris kifejezésekkel kapcsolatos új lehetőségek megjelenésével a Mozilla fejlesztői azon gondolkodtak, hogyan lehetne egyszerűsíteni az Irregexp-ből származó változások átvitelét. Mint megoldás egy burkolási koncepciót javasoltak, amely lehetővé teszi az Irregexp motor szinte változatlan használatát a SpiderMonkey-ben (a változtatások csak a '#include' blokkok automatikus cseréjére korlátozódnak).

A Mozilla átállt a Chromium motorral közös reguláris kifejezések használatára

A burkolás biztosítja az Irregexp számára a szükséges V8-specifikus képességeket, beleértve a memória- és kódkezelési funkciókat, valamint azokat az alapvető adatstruktúrákat, amelyek a memória kezelésén, kódgeneráláson és SpiderMonkey struktúrákon alapulnak.

A RegExp motor frissítése lehetővé teszi, hogy a Firefox támogassa az olyan lehetőségeket, mint a névvel ellátott csoportok, a Unicode karakterosztályok escape-élése, a dotAll jelző és a Lookbehind mód:

  • Nevzett csoportok lehetővé teszik, hogy a reguláris kifejezéssel párhuzamosan elnevezett részletek kapcsolódjanak bizonyos nevekkel a tört számok helyett (például a "/(\d{4})-(\d{2})-(\d{2})/" helyett megadható a "/(?\d{4})-(?\d{2})-(?\d{2})/" és így a évhez nem a result[1] segítségével, hanem a result.groups.year-en keresztül lehet hozzáférni).
  • Osztályok escape-elése A Unicode-jel karakterekkel bővült a \p{…} és \P{…} konstrukciókkal, például a \p{Number} minden számmal ábrázolt karaktert meghatároz (beleértve az olyan karaktereket, mint a ①), a \p{Alphabetic} - betűket (beleértve a hírókat is), a \p{Math} - matematikai karaktereket stb.
  • Zászló dotAll gyakorlati értelemben hatással van a „.” karakter illeszkedésére, beleértve a sortörési karaktereket is.
  • Mód Lookbehind lehetővé teszi, hogy a reguláris kifejezésben egy minta megelőzzön egy másikat (például a dollár összegének illesztése anélkül, hogy magát a dollárjelet el kellene kapni).

A projekt a V8 fejlesztőinek részvételével valósult meg, akik a maguk részéről azt a munkát végezték el, hogy csökkentsék az Irregexp V8-tól való függőségét, és azokat a jellemzőket, amelyeket nem lehetett megvalósítani a SpiderMonkey alapjain, kikapcsolható blokkokba («#ifdef») helyezték. Az együttműködés kölcsönösen előnyösnek bizonyult. A Mozilla fejlesztői az Irregexp-nek olyan változásokat adtak át, amelyek megszüntetik bizonyos eltéréseket a JavaScript szabvány követelményeitől, és javítják a kód minőségét. A Firefox fuzzing tesztelése során pedig korábban nem észlelt hibákra is fény derült az Irregexp kódjában, amelyek összeomlásokhoz vezettek.

Forrás: opennet.ru

Megbízható hosting vásárlása weboldalak számára, DDoS védelemmel, VPS VDS szerverek. 🔥 Megbízható webtárhely vásárlása DDoS védelemmel, VPS VDS szerverek | ProHoster