Enjin JavaScript Firefox, SpiderMonkey untuk menggunakan pelaksanaan ungkapan biasa yang dikemas kini berdasarkan kod semasa daripada enjin JavaScript V8 yang digunakan dalam penyemak imbas berasaskan Chromium. Pelaksanaan RegExp baharu akan dikeluarkan dalam Firefox 78, dijadualkan pada 30 Jun, dan akan membolehkan penyemak imbas melaksanakan semua elemen ECMAScript yang hilang berkaitan dengan ungkapan biasa.
Adalah diperhatikan bahawa enjin RegExp SpiderMonkey dilaksanakan sebagai komponen yang berasingan, menjadikannya agak bebas dan sesuai untuk penggantian tanpa memerlukan perubahan ketara pada pangkalan kod. Modulariti ini membenarkan enjin YARR RegExp asli Firefox diganti pada tahun 2014 dengan garpu enjin Irregexp V8. Irregexp terikat pada API V8, terikat pada pengumpul sampah dan menggunakan perwakilan rentetan khusus V8 dan model objek. Semasa proses menyesuaikan diri dengan API dalaman SpiderMonkey pada tahun 2014, enjin Irregexp telah ditulis semula sebahagiannya dan perubahan yang muncul, seperti bendera '\u', adalah, jika boleh, kepada garpu yang diselenggara oleh Mozilla.
Malangnya, mengekalkan garpu yang disegerakkan adalah sukar dan memerlukan sumber. Dengan pengenalan ciri berkaitan ungkapan biasa baharu dalam piawaian ECMAScript 2018, pembangun Mozilla mula mempertimbangkan cara untuk memudahkan pemindahan perubahan daripada Irregexp. Sebagai penyelesaian, mereka mencadangkan konsep pembungkus yang membolehkan SpiderMonkey menggunakan enjin Irregexp yang sebahagian besarnya tidak berubah (perubahan terhad kepada penggantian automatik blok "#include").
Pembalut menyediakan Irregexp dengan ciri khusus V8 yang diperlukan, termasuk pengurusan memori dan fungsi penjanaan kod, serta struktur data sumber yang dilaksanakan menggunakan mekanisme pengurusan memori, penjana kod dan struktur SpiderMonkey.
Kemas kini enjin RegExp akan membolehkan Firefox menyokong ciri seperti tangkapan dinamakan, pelarian kelas aksara Unikod, bendera dotAll dan mod Pandang Belakang:
- membenarkan anda untuk mengaitkan bahagian rentetan yang dipadankan dengan ungkapan biasa dengan nama tertentu dan bukannya nombor padanan ordinal (contohnya, bukannya "/(\d{4})-(\d{2})-(\d{2})/" anda boleh menentukan "/(? \d{4})-(? \d{2})-(? \d{2})/» dan akses tahun bukan melalui hasil[1], tetapi melalui result.groups.year).
- Simbol Unikod ditambah oleh binaan \p{…} dan \P{…}, contohnya, \p{Number} mentakrifkan semua aksara yang mungkin dengan imej nombor (termasuk aksara seperti ①), \p{Abjad} — huruf (termasuk hieroglif), \p{Math} — simbol matematik, dsb.
- Флаг menyebabkan "." topeng untuk dicetuskan, termasuk untuk aksara suapan baris.
- Mod membolehkan anda untuk menentukan dalam ungkapan biasa bahawa satu corak datang sebelum yang lain (contohnya, sepadan dengan jumlah dolar tanpa menangkap tanda dolar).
Projek ini telah dilaksanakan dengan penyertaan pembangun V8, yang, bagi pihak mereka, berusaha untuk mengurangkan pergantungan Irregexp pada V8 dan memindahkan beberapa ciri yang tidak dapat dilaksanakan menggunakan SpiderMonkey ke dalam blok "#ifdef" yang boleh dilumpuhkan. Kerjasama itu terbukti saling menguntungkan. Bagi pihak mereka, pembangun Mozilla menyumbangkan perubahan kepada Irregexp yang menghapuskan beberapa dengan keperluan standard JavaScript dan Kualiti kod. Selain itu, semasa ujian Firefox yang kabur, ralat Irregexp yang sebelum ini tidak disedari yang menyebabkan ranap telah dikenal pasti dan diperbaiki.
Sumber: opennet.ru
