Mozilla Chromium-ekin adierazpen erregular motor arrunt bat erabiltzera pasatu zen

Firefox-en erabiltzen den SpiderMonkey JavaScript motorra transferitu uneko kodean oinarritutako adierazpen erregularren inplementazio eguneratua erabiltzeko Irregexp Chromium proiektuan oinarritutako arakatzaileetan erabiltzen den V8 JavaScript motorretik. RegExp-en inplementazio berria Firefox 78-n eskainiko da, ekainaren 30erako aurreikusita, eta adierazpen erregularrekin lotutako falta diren ECMAScript elementu guztiak arakatzailera ekarriko ditu.

Kontuan izan da SpiderMonkey-n RegExp motorra osagai bereizi gisa diseinatuta dagoela, eta horrek nahiko independentea eta ordezkatzeko egokia bihurtzen du kodearen oinarrian aldaketa esanguratsuak egin beharrik gabe. Modularitateak posible egin zuen 2014an Firefox-en jatorrian erabilitako YARR RegExp motorra V8ko Irregexp motorren sardexka batekin ordezkatzea. Irregexp V8 APIari lotuta dago, zabor-biltzaileari lotuta dago eta V8-ko kateen irudikapen espezifikoa eta objektu-eredua erabiltzen ditu. 2014an SpiderMonkey-ren barneko APIra egokitzeko prozesuan, Irregexp motorra partzialki berridatzi zen, eta sortzen ari ziren aldaketak, hala nola '\u' bandera, ahal zenean transferitu Mozillak mantentzen duen sardexka batean.

Zoritxarrez, sardexka sinkronizatu bat mantentzea zaila da eta baliabide asko behar dira. ECMAScript 2018 estandarrean adierazpen erregularrei lotutako eginbide berrien agerpenarekin, Mozillako garatzaileek Irregexp-tik aldaketak migratzea erraztu pentsatu zuten. Irteera gisa, bilgarri kontzeptu bat proposatu zen, SpiderMonkey-n ia aldatu gabeko Irregexp motorra erabiltzea ahalbidetzen duena (aldaketak "#include" blokeen ordezkapen automatikora soilik murrizten dira).

Mozilla Chromium-ekin adierazpen erregular motor arrunt bat erabiltzera pasatu zen

Esparruak Irregexp V8rako beharrezko gaitasun espezifikoak eskaintzen ditu, memoria kudeatzeko eta kodea sortzeko funtzioak barne, baita memoria kudeatzeko motorrak, kode-sorgailuak eta SpiderMonkey egiturak erabiliz inplementatzen diren jatorrizko datu-egiturak ere.

RegExp motorra eguneratzeak Firefoxek funtzioak onartzen ditu, hala nola, harrapaketak, Unicode karaktere-klaseen ihesa, dotAll bandera eta Lookbehind modua:

  • Talde izendatuak Adierazpen erregular batekin bat datorren kate baten zatiak bat-etortzeen serie-zenbakiekin ordez izen zehatzekin lotzeko aukera ematen dizu (adibidez, β€œ/(\d{4})-(\d{2})-(\d{)-en ordez 2})/” zehaztu dezakezu β€œ/( ? \d{4})-(? \d{2})-(? \d{2})/" eta urtera sartu ez emaitza[1] bidez, emaitza.taldeak.urtearen bidez baizik).
  • Ihes klaseak Unicode karaktereek \p{...} eta \P{...} eraikuntzak gehitzen dituzte, adibidez, \p{Zenbakia} karaktere posible guztiak definitzen ditu zenbakiak (β‘  bezalako karaktereak barne), \p{Alfabetikoak} - letrak (barne hieroglifoak), \p{Math} β€” sinbolo matematikoak, etab.
  • bandera puntuGuztiak "." maskara sua eragiten du. lerro jario karaktereak barne.
  • erregimen Begiratu atzean aukera ematen du adierazpen erregular batean eredu bat bestearen aurretik dagoela zehaztea (adibidez, dolar-kopuru batekin bat etortzea dolarraren ikurra jaso gabe).

Proiektua V8ko garatzaileen parte-hartzearekin egin zen, zeinek, bere aldetik, Irregexp V8rekiko menpekotasuna murrizteko lan egin zuten, eta SpiderMonkey erabiliz inplementatu ezin diren ezaugarri batzuk β€œ#ifdef” bloke desgaigarrietara eraman zituzten. Elkarlana onuragarria izan zen elkarrekiko. Bere aldetik, Mozillako garatzaileek zenbait aldaketa ezabatzen dituzten Irregexp-en aurkeztu zituzten inkoherentziak JavaScript estandarraren eskakizunekin eta hobetuz kodearen kalitatea. Era berean, Firefox-en proba nahasian zehar, aurretik hutsegiteen Irregexp kodean ohartu gabeko akatsak identifikatu eta ezabatu ziren.

Iturria: opennet.ru

Gehitu iruzkin berria