Lumipat ang Mozilla sa paggamit ng isang karaniwang regular na expression engine na may Chromium

ΠŸΡ€ΠΈΠΌΠ΅Π½ΡΠ΅ΠΌΡ‹ΠΉ Π² Firefox JavaScript-Π΄Π²ΠΈΠΆΠΎΠΊ SpiderMonkey inilipat Π½Π° использованиС ΠΎΠ±Π½ΠΎΠ²Π»Ρ‘Π½Π½ΠΎΠΉ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ рСгулярных Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ, основанной Π½Π° Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΌ ΠΊΠΎΠ΄Π΅ Irregexp ΠΈΠ· JavaScript-Π΄Π²ΠΈΠΆΠΊΠ° V8, примСняСмого Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π°Ρ… Π½Π° основС ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π‘hromium. Новая рСализация RegExp Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½Π° Π² выпускС Firefox 78, Π½Π°ΠΌΠ΅Ρ‡Π΅Π½Π½ΠΎΠΌ Π½Π° 30 июня, ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅ всС Π½Π΅Π΄ΠΎΡΡ‚Π°ΡŽΡ‰ΠΈΠ΅ элСмСнты ECMAScript, связанныС с рСгулярными выраТСниями.

ΠžΡ‚ΠΌΠ΅Ρ‡Π°Π΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎ Π΄Π²ΠΈΠΆΠΎΠΊ RegExp Π² SpiderMonkey ΠΎΡ„ΠΎΡ€ΠΌΠ»Π΅Π½ Π² Π²ΠΈΠ΄Π΅ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ Π΅Π³ΠΎ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ нСзависимым ΠΈ ΠΏΡ€ΠΈΠ³ΠΎΠ΄Π½Ρ‹ΠΌ для Π·Π°ΠΌΠ΅Π½Ρ‹ Π±Π΅Π· нСобходимости внСсСния Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² ΠΊΠΎΠ΄ΠΎΠ²ΡƒΡŽ Π±Π°Π·Ρƒ. ΠœΠΎΠ΄ΡƒΠ»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ»Π° Π² 2014 Π³ΠΎΠ΄Ρƒ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ примСняСмый Π² Firefox RegExp-Π΄Π²ΠΈΠΆΠΎΠΊ YARR Π½Π° Ρ„ΠΎΡ€ΠΊ Π΄Π²ΠΈΠΆΠΊΠ° Irregexp ΠΈΠ· V8. Irregexp завязан Π½Π° API V8, привязан ΠΊ сборщику мусора, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ спСцифичныС для V8 прСдставлСниС строк ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΡƒΡŽ модСль. Π’ процСссС Π°Π΄Π°ΠΏΡ‚Π°Ρ†ΠΈΠΈ ΠΊ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΌΡƒ API SpiderMonkey Π² 2014 Π³ΠΎΠ΄Ρƒ Π΄Π²ΠΈΠΆΠΎΠΊ Irregexp частично пСрСписали, Π° ΠΏΠΎΡΠ²Π»ΡΡŽΡ‰ΠΈΠ΅ΡΡ измСнСния, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Ρ„Π»Π°Π³ β€˜\u’, ΠΏΠΎ возмоТности inilipat Π² ΠΎΡ‚Π²Π΅Ρ‚Π²Π»Π΅Π½ΠΈΠ΅, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΠΎΠ΅ Mozilla.

К соТалСнию, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅ синхронизированного Ρ„ΠΎΡ€ΠΊΠ° являСтся Ρ‚Ρ€ΡƒΠ΄Π½ΠΎΠΉ Π·Π°Π΄Π°Ρ‡Π΅ΠΉ ΠΈ Π΅Π³ΠΎ сопровоТдСниС Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π±ΠΎΠ»ΡŒΡˆΠΈΡ… рСсурсов. Π‘ появлСниСм Π² стандартС ECMAScript 2018 Π½ΠΎΠ²Ρ‹Ρ… возмоТностСй, связанных с рСгулярными выраТСниями, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ Mozilla Π·Π°Π΄ΡƒΠΌΠ°Π»ΠΈΡΡŒ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ пСрСнос ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΈΠ· Irregexp. Π’ качСствС Π²Ρ‹Ρ…ΠΎΠ΄Π° Π±Ρ‹Π»Π° ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½Π° концСпция обвязки, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π°Ρ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² SpiderMonkey ΠΏΠΎΡ‡Ρ‚ΠΈ Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Ρ‘Π½Π½Ρ‹ΠΉ Π΄Π²ΠΈΠΆΠΎΠΊ Irregexp (измСнСния сводятся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊ автоматичСской Π·Π°ΠΌΠ΅Π½Π΅ Π±Π»ΠΎΠΊΠΎΠ² Β«#includeΒ»).

Lumipat ang Mozilla sa paggamit ng isang karaniwang regular na expression engine na may Chromium

Обвязка прСдоставляСт для Irregexp Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ спСцифичныС возмоТности V8, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ управлСния ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ ΠΈ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠ΅ΠΉ ΠΊΠΎΠ΄Π°, Π° Ρ‚Π°ΠΊΠΆΠ΅ исходныС структуры Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ Π½Π° основС ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠ² управлСния ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ, Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² ΠΊΠΎΠ΄Π° ΠΈ структур SpiderMonkey.

ОбновлСниС RegExp-Π΄Π²ΠΈΠΆΠΊΠ° ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ Π² Firefox ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ Ρ‚Π°ΠΊΠΈΡ… возмоТностСй, ΠΊΠ°ΠΊ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Π³Ρ€ΡƒΠΏΠΏΡ‹ (named captures), экранированиС классов Unicode-символов, Ρ„Π»Π°Π³ dotAll ΠΈ Ρ€Π΅ΠΆΠΈΠΌ Lookbehind:

  • Mga pinangalanang pangkat nagbibigay-daan sa iyong iugnay ang mga bahagi ng isang string na itinutugma ng isang regular na expression na may mga partikular na pangalan sa halip na mga serial number ng mga tugma (halimbawa, sa halip na "/(\d{4})-(\d{2})-(\d{ 2})/” maaari mong tukuyin ang β€œ/( ?\d{4})-(?\d{2})-(?\d{2})/" at i-access ang taon hindi sa pamamagitan ng resulta[1], ngunit sa pamamagitan ng resulta.groups.year).
  • Pagtakas sa mga klase Ang mga character na Unicode ay nagdaragdag ng mga konstruksyon \p{...} at \P{...}, halimbawa, ang \p{Number} ay tumutukoy sa lahat ng posibleng mga character na naglalarawan ng mga numero (kabilang ang mga character tulad ng β‘ ), \p{Alphabetic} - mga titik (kabilang ang hieroglyph ), \p{Math} β€” mga simbolo ng matematika, atbp.
  • I-flag dotLahat nagiging sanhi ng pag-apoy ng "." mask. kasama ang mga line feed na character.
  • rehimen Tumingin sa likod nagbibigay-daan sa iyo na matukoy sa isang regular na expression na ang isang pattern ay nauuna sa isa pa (halimbawa, tumutugma sa isang halaga ng dolyar nang hindi kumukuha ng dollar sign).

ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ Π±Ρ‹Π» осущСствлён ΠΏΡ€ΠΈ участии Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² V8, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ со своСй стороны ΠΏΡ€ΠΎΠ²Π΅Π»ΠΈ Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΏΠΎ ΡΠΎΠΊΡ€Π°Ρ‰Π΅Π½ΠΈΡŽ зависимости Irregexp ΠΎΡ‚ V8, ΠΈ вынСсли Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ особСнности, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½Π° Π±Π°Π·Π΅ SpiderMonkey, Π² ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡ‹Π΅ Π±Π»ΠΎΠΊΠΈ Β«#ifdefΒ». БотрудничСство оказалось Π²Π·Π°ΠΈΠΌΠΎΠ²Ρ‹Π³ΠΎΠ΄Π½Ρ‹ΠΌ. Π‘ΠΎ своСй стороны Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ Mozilla ΠΏΠ΅Ρ€Π΅Π΄Π°Π»ΠΈ Π² Irregexp измСнСния, ΡƒΡΡ‚Ρ€Π°Π½ΡΡŽΡ‰ΠΈΠ΅ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ hindi pagkakapare-pareho с трСбованиями стандарта JavaScript ΠΈ ΡƒΠ»ΡƒΡ‡ΡˆΠ°ΡŽΡ‰ΠΈΠ΅ качСство ΠΊΠΎΠ΄Π°. Π’Π°ΠΊΠΆΠ΅ Π² Ρ…ΠΎΠ΄Π΅ fuzzing-тСстирования Firefox Π±Ρ‹Π»ΠΈ выявлСны ΠΈ устранСны Ρ€Π°Π½Π΅Π΅ Π½Π΅ Π·Π°ΠΌΠ΅Ρ‡Π΅Π½Π½Ρ‹Π΅ ошибки Π² ΠΊΠΎΠ΄Π΅ Irregexp, приводящиС ΠΊ ΠΊΡ€Π°Ρ…Π°ΠΌ.

Pinagmulan: opennet.ru

Magdagdag ng komento