Mozilla Chromium bilan umumiy muntazam ifoda mexanizmidan foydalanishga o'tdi

Firefox-da ishlatiladigan SpiderMonkey JavaScript mexanizmi uzatildi joriy kodga asoslangan muntazam ifodalarning yangilangan ilovasidan foydalanish Irregexp Chromium loyihasi asosidagi brauzerlarda ishlatiladigan V8 JavaScript dvigatelidan. RegExp-ning yangi ilovasi 78-iyunga rejalashtirilgan Firefox 30-da taqdim etiladi va oddiy iboralar bilan bog'liq barcha etishmayotgan ECMAScript elementlarini brauzerga olib keladi.

Qayd etilishicha, SpiderMonkey’dagi RegExp dvigateli alohida komponent sifatida ishlab chiqilgan bo‘lib, bu uni nisbatan mustaqil va kod bazasiga jiddiy o‘zgartirishlar kiritmasdan almashtirishga yaroqli qiladi. Modullilik 2014 yilda Firefox-da dastlab ishlatilgan YARR RegExp dvigatelini V8-dan Irregexp dvigatelining vilkalari bilan almashtirish imkonini berdi. Irregexp V8 API bilan bog'langan, axlat yig'uvchiga bog'langan va V8-ga xos satr tasviri va ob'ekt modelidan foydalanadi. 2014 yilda SpiderMonkey-ning ichki API-ga moslashish jarayonida Irregexp dvigateli qisman qayta yozildi va iloji bo'lsa, "\u" bayrog'i kabi paydo bo'ladigan o'zgarishlar uzatildi Mozilla tomonidan saqlanadigan vilkaga.

Afsuski, sinxronlangan vilkani saqlash qiyin va resurslarni talab qiladi. ECMAScript 2018 standartida muntazam iboralar bilan bog'liq yangi xususiyatlar paydo bo'lishi bilan Mozilla ishlab chiquvchilari Irregexp-dan o'zgarishlarni ko'chirishni qanday osonlashtirish haqida o'ylashdi. Chiqish yo'li sifatida SpiderMonkey-da deyarli o'zgarmagan Irregexp dvigatelidan foydalanishga imkon beruvchi o'rash kontseptsiyasi taklif qilindi (o'zgarishlar faqat "#include" bloklarini avtomatik almashtirishga qisqartiriladi).

Mozilla Chromium bilan umumiy muntazam ifoda mexanizmidan foydalanishga o'tdi

Ramka Irregexp-ga kerakli V8-ga xos imkoniyatlarni, jumladan xotirani boshqarish va kod yaratish funktsiyalarini, shuningdek, xotira boshqaruvi dvigatellari, kod generatorlari va SpiderMonkey tuzilmalari yordamida amalga oshiriladigan mahalliy ma'lumotlar tuzilmalarini taqdim etadi.

RegExp mexanizmini yangilash Firefox-ga nomlangan tasvirlar, Unicode belgilar sinfidan qochish, dotAll bayrog'i va Lookbehind rejimi kabi xususiyatlarni qo'llab-quvvatlash imkonini beradi:

  • Nomlangan guruhlar muntazam iboraga mos keladigan satr qismlarini moslik seriya raqamlari oʻrniga maʼlum nomlar bilan bogʻlash imkonini beradi (masalan, “/(\d{4})-(\d{2})-(\d{ oʻrniga) 2})/” ni belgilashingiz mumkin “/( ? \d{4})-(? \d{2})-(? \d{2})/") va yilga natija[1] orqali emas, balki result.groups.year orqali kiring.
  • Sinflardan qochish Unicode belgilar \p{...} va \P{...} konstruksiyalarini qo'shadi, masalan, \p{Raqam} raqamlarni tasvirlaydigan barcha mumkin bo'lgan belgilarni (jumladan, ① kabi belgilar), \p{Alfavit} - harflarni (jumladan,) belgilaydi ierogliflar ), \p{Math} — matematik belgilar va boshqalar.
  • Bayroq dotAll "." niqobining yonishiga olib keladi. qator tasma belgilarini o'z ichiga oladi.
  • rejimi Orqaga qarang muntazam ifodada bir naqsh boshqasidan oldin turishini aniqlash imkonini beradi (masalan, dollar belgisini ushlamasdan dollar miqdoriga mos kelish).

Loyiha V8 ishlab chiquvchilari ishtirokida amalga oshirildi, ular o'z navbatida Irregexp-ning V8-ga bog'liqligini kamaytirish ustida ishladilar va SpiderMonkey yordamida amalga oshirib bo'lmaydigan ba'zi xususiyatlarni "#ifdef" bloklarini o'chirishga o'tkazdilar. Hamkorlik o'zaro manfaatli bo'ldi. O'z navbatida, Mozilla ishlab chiquvchilari Irregexp-ga ba'zilarini yo'q qiladigan o'zgartirishlar kiritdilar nomuvofiqliklar JavaScript standarti talablari bilan va yaxshilash kod sifati. Bundan tashqari, Firefox-ning fuzzing testi paytida, Irregexp kodidagi nosozliklarga olib kelgan ilgari sezilmagan xatolar aniqlandi va yo'q qilindi.

Manba: opennet.ru

a Izoh qo'shish