Mozilla ilitumia kutumia injini ya kawaida ya kujieleza yenye Chromium

Injini ya JavaScript ya SpiderMonkey ya Firefox kutafsiriwa kutumia utekelezaji uliosasishwa wa misemo ya kawaida kulingana na msimbo wa sasa Iregexp kutoka kwa injini ya JavaScript ya V8 inayotumika katika vivinjari kulingana na mradi wa Chromium. Utekelezaji mpya wa RegExp utapendekezwa katika toleo la Juni 78 la Firefox 30, na itaruhusu kivinjari kutekeleza vipengele vyote vya ECMAScript vinavyokosekana kuhusiana na misemo ya kawaida.

Ikumbukwe kwamba injini ya RegExp katika SpiderMonkey imeundwa kama sehemu tofauti, ambayo inafanya kuwa huru na inafaa kwa uingizwaji bila hitaji la kufanya mabadiliko makubwa kwa msingi wa nambari. Ubadilikaji ulioruhusiwa mwaka wa 2014 kuchukua nafasi ya injini ya YARR RegExp iliyotumika awali katika Firefox na uma ya injini ya Irregexp kutoka V8. Irregexp imefungwa kwa API ya V8, iliyounganishwa na mtoaji wa taka, hutumia uwakilishi wa kamba mahususi wa V8 na muundo wa kitu. Katika mchakato wa kuzoea API ya ndani ya SpiderMonkey mwaka wa 2014, injini ya Irregexp iliandikwa upya kwa kiasi, na mabadiliko yanayoonekana, kama vile bendera ya '\u', inapowezekana. alivumilia kwa uma unaodumishwa na Mozilla.

Kwa bahati mbaya, kudumisha uma iliyosawazishwa ni ngumu na inahitaji rasilimali nyingi kudumisha. Kwa kuanzishwa kwa vipengele vipya vinavyohusiana na usemi wa kawaida katika kiwango cha ECMAScript 2018, wasanidi programu wa Mozilla walianza kufikiria jinsi wanavyoweza kuweka mabadiliko kwa urahisi kutoka kwa Irregexp. Kama njia ya nje, dhana ya kufunga ilipendekezwa, ambayo inaruhusu kutumia injini ya Irregexp karibu isiyobadilika katika SpiderMonkey (mabadiliko yanakuja tu kwa uingizwaji wa moja kwa moja wa vitalu vya "#include").

Mozilla ilitumia kutumia injini ya kawaida ya kujieleza yenye Chromium

Ufungaji hutoa Irregexp na vipengele muhimu vya V8, ikiwa ni pamoja na usimamizi wa kumbukumbu na kazi za kuzalisha msimbo, pamoja na miundo ya awali ya data ambayo inatekelezwa kwa misingi ya taratibu za usimamizi wa kumbukumbu, jenereta za kanuni, na miundo ya SpiderMonkey.

Sasisho la injini ya RegExp itaruhusu Firefox kuauni vipengele kama vile kunasa kwa majina, kuepuka aina za herufi za Unicode, bendera ya dotAll, na modi ya Lookbehind:

  • Vikundi vilivyotajwa hukuruhusu kuhusisha sehemu za mfuatano unaolingana na usemi wa kawaida na majina fulani badala ya nambari za mfululizo za zinazolingana (kwa mfano, badala ya "/(\d{4})-(\d{2})-(\d{ 2})/" unaweza kubainisha "/( ? \d{4})-(? \d{2})-(? \d{2})/" na ufikie mwaka si kwa matokeo[1], bali kupitia result.groups.year).
  • Madarasa ya kutoroka Herufi za Unicode huongeza muundo wa \p{…} na \P{…}, kwa mfano, \p{Number} inafafanua herufi zote zinazowezekana kwa picha ya nambari (pamoja na herufi kama β‘ ), \p{Alfabeti} - herufi (pamoja na hieroglyphs ), \p{Math} - alama za hisabati, nk.
  • Bendera dotAll husababisha mask "." ikijumuisha wahusika wapya.
  • Njia Angalia nyuma hukuruhusu kuamua kwa usemi wa kawaida kwamba muundo mmoja unatangulia mwingine (kwa mfano, kulinganisha kiasi cha dola bila kukamata ishara ya dola).

Mradi huu ulitekelezwa kwa ushiriki wa watengenezaji wa V8, ambao, kwa upande wao, walifanya kazi ili kupunguza utegemezi wa Irregexp kwenye V8, na kuhamisha baadhi ya vipengele ambavyo haviwezi kutekelezwa kulingana na SpiderMonkey kwenye vitalu vya "#ifdef" vilivyozimwa. Ushirikiano huo ulionekana kuwa wa manufaa kwa pande zote. Kwa upande wao, wasanidi wa Mozilla wamewasilisha mabadiliko kwa Irregexp ambayo huondoa baadhi kutofautiana na mahitaji ya kiwango cha JavaScript na kuboresha ubora wa kanuni. Pia, wakati wa majaribio ya fuzzing ya Firefox, makosa ambayo hayakuonekana hapo awali katika nambari ya Irregexp, na kusababisha ajali, yalitambuliwa na kurekebishwa.

Chanzo: opennet.ru

Kuongeza maoni