Mozilla Chromium ilə ümumi müntəzəm ifadə mühərrikindən istifadə etməyə keçdi

Firefox-da istifadə edilən SpiderMonkey JavaScript mühərriki köçürüldü cari kod əsasında müntəzəm ifadələrin yenilənmiş tətbiqindən istifadə etmək Irregexp Chromium layihəsi əsasında brauzerlərdə istifadə olunan V8 JavaScript mühərrikindən. RegExp-in yeni tətbiqi 78 iyuna planlaşdırılan Firefox 30-də təklif olunacaq və müntəzəm ifadələrlə bağlı bütün çatışmayan ECMAScript elementlərini brauzerə gətirəcək.

Qeyd olunur ki, SpiderMonkey-də RegExp mühərriki ayrıca komponent kimi hazırlanıb və bu, onu nisbətən müstəqil edir və kod bazasında əhəmiyyətli dəyişikliklərə ehtiyac olmadan dəyişdirilməsi üçün əlverişli edir. Modulluq 2014-cü ildə ilkin olaraq Firefox-da istifadə edilən YARR RegExp mühərrikini V8-dən olan Irregexp mühərrikinin çəngəlləri ilə əvəz etməyə imkan verdi. Irregexp V8 API-yə bağlıdır, zibil toplayıcıya bağlıdır və V8-ə xüsusi simli təsvir və obyekt modelindən istifadə edir. 2014-cü ildə SpiderMonkey-in daxili API-yə uyğunlaşma prosesində Irregexp mühərriki qismən yenidən yazıldı və mümkün olan yerlərdə "\u" bayrağı kimi yeni yaranan dəyişikliklər edildi. köçürüldü Mozilla tərəfindən saxlanılan çəngələ.

Təəssüf ki, sinxron çəngəl saxlamaq çətindir və resurs tələb edir. ECMAScript 2018 standartında müntəzəm ifadələrlə bağlı yeni funksiyaların meydana çıxması ilə Mozilla tərtibatçıları dəyişiklikləri Irregexp-dən köçürməyi asanlaşdırmaq üçün fikirləşdilər. Çıxış yolu kimi, SpiderMonkey-də demək olar ki, dəyişməmiş Irregexp mühərrikindən istifadə etməyə imkan verən bükmə konsepsiyası təklif edildi (dəyişikliklər yalnız "#include" bloklarının avtomatik dəyişdirilməsinə endirilir).

Mozilla Chromium ilə ümumi müntəzəm ifadə mühərrikindən istifadə etməyə keçdi

Çərçivə Irregexp-ə yaddaşın idarə edilməsi və kod yaratma funksiyaları, həmçinin yaddaş idarəetmə mühərrikləri, kod generatorları və SpiderMonkey strukturlarından istifadə etməklə həyata keçirilən yerli məlumat strukturları daxil olmaqla, V8-ə xas zəruri imkanlar təqdim edir.

RegExp mühərrikinin yenilənməsi Firefox-a adlandırılmış çəkilişlər, Unicode simvol sinfindən qaçmaq, dotAll bayrağı və Lookbehind rejimi kimi funksiyaları dəstəkləməyə imkan verəcək:

  • Adlandırılmış qruplar adi ifadə ilə uyğun gələn sətir hissələrini uyğunluqların seriya nömrələri əvəzinə xüsusi adlarla əlaqələndirməyə imkan verir (məsələn, “/(\d{4})-(\d{2})-(\d{ əvəzinə) 2})/” təyin edə bilərsiniz “/( ? \d{4})-(? \d{2})-(? \d{2})/" və ili nəticə[1] vasitəsilə deyil, nəticə.qruplar.il vasitəsilə əldə edin.
  • Dərslərdən qaçmaq Unicode simvolları \p{...} və \P{...} konstruksiyalarını əlavə edir, məsələn, \p{Number} rəqəmləri (o cümlədən ① kimi simvolları), \p{Əlifba} - hərfləri (o cümlədən) təsvir edən bütün mümkün simvolları müəyyən edir. heroqliflər ), \p{Riyaziyyat} — riyazi simvollar və s.
  • Bayraq dotAll "." maskasının yanmasına səbəb olur. sətir feed simvolları daxil olmaqla.
  • Modu Arxaya bax müntəzəm ifadədə bir nümunənin digərindən əvvəl olduğunu müəyyən etməyə imkan verir (məsələn, dollar işarəsini tutmadan dollar məbləğinə uyğunluq).

Layihə, öz növbəsində, Irregexp-in V8-dən asılılığını azaltmağa çalışan və SpiderMonkey-dən istifadə etməklə həyata keçirilə bilməyən bəzi funksiyaları “#ifdef” bloklarına köçürən V8 tərtibatçılarının iştirakı ilə həyata keçirilib. Əməkdaşlıq qarşılıqlı faydalı oldu. Öz növbəsində, Mozilla tərtibatçıları bəzilərini aradan qaldıran Irregexp-ə dəyişikliklər təqdim etdilər uyğunsuzluqlar JavaScript standartının tələbləri ilə və yaxşılaşır kod keyfiyyəti. Həmçinin, Firefox-un fuzzing testi zamanı Irregexp kodunda qəzalara səbəb olan əvvəllər nəzərə alınmamış səhvlər müəyyən edilib və aradan qaldırılıb.

Mənbə: opennet.ru

Добавить комментарий