Mozilla gentos nganggo mesin éksprési biasa sareng Chromium

Mesin JavaScript SpiderMonkey Firefox ditarjamahkeun ngagunakeun palaksanaan diropéa tina ekspresi biasa dumasar kana kode ayeuna Irregexp ti mesin JavaScript V8 dipaké dina panyungsi dumasar kana proyék Chromium. A palaksanaan anyar RegExp bakal diusulkeun dina 78 Juni release Firefox 30, sarta bakal ngidinan browser pikeun nerapkeun sagala elemen ECMAScript leungit patali jeung ungkapan biasa.

Hal ieu dicatet yén mesin RegExp di SpiderMonkey dirancang salaku komponén misah, nu ngajadikeun eta rélatif bebas sarta cocog pikeun ngagantian tanpa kudu nyieun parobahan signifikan kana basa kode. Modularitas diwenangkeun dina 2014 pikeun ngaganti mesin YARR RegExp asalna dipaké dina Firefox ku garpu mesin Irregexp ti V8. Irregexp ieu dihijikeun ka API V8, dihijikeun ka collector sampah, ngagunakeun V8-spésifik string ngagambarkeun jeung model objék. Dina prosés adaptasi kana API internal SpiderMonkey di 2014, mesin Irregexp sawaréh ditulis deui, sareng parobihan anu muncul, sapertos bendera '\u', upami mungkin. endured ka garpu anu dijaga ku Mozilla.

Hanjakalna, ngajaga garpu anu disingkronkeun sesah sareng peryogi seueur sumber pikeun ngajaga. Kalayan ngenalkeun fitur-fitur anyar anu aya hubunganana sareng éksprési biasa dina standar ECMAScript 2018, pamekar Mozilla mimiti mikir ngeunaan kumaha aranjeunna tiasa ngarobih parobahan tina Irregexp. Salaku jalan kaluar, konsép ngariung diusulkeun, anu ngamungkinkeun ngagunakeun mesin Irregexp ampir unchanged di SpiderMonkey (parobahan turun ngan ka ngagantian otomatis tina "#include" blok).

Mozilla gentos nganggo mesin éksprési biasa sareng Chromium

Ngariung nyadiakeun Irregexp kalawan fitur V8-spésifik perlu, kaasup manajemén memori sareng fungsi generasi kode, kitu ogé struktur data awal nu dilaksanakeun dina dasar mékanisme manajemén memori, generator kode, sarta struktur SpiderMonkey.

Pembaruan kana mesin RegExp bakal ngamungkinkeun Firefox ngadukung fitur sapertos nangkep anu namina, lolos kelas karakter Unicode, bandéra dotAll, sareng mode Lookbehind:

  • Grup ngaranna ngidinan Anjeun pikeun ngahubungkeun bagian tina string cocog ku ekspresi biasa kalawan ngaran husus tinimbang nomer serial patandingan (contona, tinimbang "/(\d{4})-(\d{2})-(\d{ 2})/" anjeun tiasa nangtukeun "/(? \d{4})-(? \d{2})-(? \d{2})/" jeung aksés taun teu ngaliwatan hasil[1], tapi ngaliwatan result.groups.year).
  • Kabur kelas Karakter Unicode nambahkeun konstruk \p{…} jeung \P{…}, contona, \p{Number} ngahartikeun sakabeh karakter nu mungkin jeung gambar angka (kaasup karakter kawas ①), \p{Alphabetic} - hurup (kaasup hiéroglif ), \p{Math} — simbol matematik, jsb.
  • bandera dotSadaya ngabalukarkeun topeng "." kaasup karakter baris anyar.
  • Modeu Neuteup ka tukang ngidinan Anjeun pikeun nangtukeun dina ekspresi biasa nu hiji pola miheulaan sejen (Contona, cocog jumlah dollar tanpa nyekel tanda dollar).

Proyék ieu dilaksanakeun kalawan partisipasi pamekar V8, anu, pikeun bagian maranéhanana, digawé pikeun ngurangan gumantungna tina Irregexp on V8, sarta dipindahkeun sababaraha fitur nu teu bisa dilaksanakeun dumasar kana SpiderMonkey kana ditumpurkeun "#ifdef" blok. Kolaborasi kabuktian silih mangpaat. Pikeun bagian maranéhanana, pamekar Mozilla geus dikintunkeun parobahan Irregexp nu ngaleungitkeun sababaraha inconsistencies kalawan sarat tina standar JavaScript na ningkatkeun kualitas kode. Oge, salila nguji fuzzing of Firefox, kasalahan saméméhna unnoticed dina kode Irregexp, ngarah kana kacilakaan, anu diidentifikasi jeung dibereskeun.

sumber: opennet.ru

Tambahkeun komentar