Mozilla beralih kepada menggunakan enjin ekspresi biasa biasa dengan Chromium

Enjin JavaScript Firefox, SpiderMonkey dipindahkan untuk menggunakan pelaksanaan ungkapan biasa yang dikemas kini berdasarkan kod semasa Irregexp 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, dipindahkan 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").

 Mozilla beralih kepada menggunakan enjin ekspresi biasa biasa dengan Chromium

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:

  • Kumpulan yang dinamakan 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).
  • Saringan kelas 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.
  • Флаг dotSemua menyebabkan "." topeng untuk dicetuskan, termasuk untuk aksara suapan baris.
  • Mod Tengok belakang 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 ketidakselarasan dengan keperluan standard JavaScript dan bertambah baik 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

Tambah komen