Mozilla បានប្តូរទៅប្រើម៉ាស៊ីនកន្សោមធម្មតាធម្មតាជាមួយ Chromium

Применяемый в Firefox JavaScript-движок SpiderMonkey ផ្ទេរ на использование обновлённой реализации регулярных выражений, основанной на актуальном коде 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’, по возможности ផ្ទេរ в ответвление, поддерживаемое Mozilla.

К сожалению, поддержание синхронизированного форка является трудной задачей и его сопровождение требует больших ресурсов. С появлением в стандарте ECMAScript 2018 новых возможностей, связанных с регулярными выражениями, разработчики Mozilla задумались как можно упростить перенос изменений из Irregexp. В качестве выхода была предложена концепция обвязки, позволяющая использовать в SpiderMonkey почти неизменённый движок Irregexp (изменения сводятся только к автоматической замене блоков «#include»).

Mozilla បានប្តូរទៅប្រើម៉ាស៊ីនកន្សោមធម្មតាធម្មតាជាមួយ Chromium

Обвязка предоставляет для Irregexp необходимые специфичные возможности V8, включая функции управления памятью и генерацией кода, а также исходные структуры данных, которые реализованы на основе механизмов управления памятью, генераторов кода и структур SpiderMonkey.

Обновление RegExp-движка позволит обеспечить в Firefox поддержку таких возможностей, как именованные группы (named captures), экранирование классов Unicode-символов, флаг dotAll и режим Lookbehind:

  • ក្រុមដែលមានឈ្មោះ អនុញ្ញាតឱ្យអ្នកភ្ជាប់ផ្នែកនៃខ្សែអក្សរដែលផ្គូផ្គងដោយកន្សោមធម្មតាដែលមានឈ្មោះជាក់លាក់ជំនួសឱ្យលេខស៊េរីនៃការផ្គូផ្គង (ឧទាហរណ៍ ជំនួសឱ្យ “/(\d{4})-(\d{2})-(\d{ 2})/” អ្នកអាចបញ្ជាក់ “/( ? \d{4})-(? \d{2})-(? \d{2})/" និងចូលប្រើឆ្នាំមិនមែនតាមរយៈលទ្ធផល[1] ប៉ុន្តែតាមរយៈ result.groups.year)។
  • ការរត់គេចពីថ្នាក់ តួអក្សរយូនីកូដបន្ថែមសំណង់ \p{...} និង \P{...} ឧទាហរណ៍ \p{Number} កំណត់តួអក្សរដែលអាចធ្វើបានទាំងអស់ដែលពណ៌នាអំពីលេខ (រួមទាំងនិមិត្តសញ្ញាដូចជា ①) \p{Alphabetic} - អក្សរ (រួមទាំង hieroglyphs ), \p{Math} — និមិត្តសញ្ញាគណិតវិទ្យា។ល។
  • ដាក់ទង់ dotAll ធ្វើឱ្យរបាំង "" ឆេះ។ រួមទាំងតួអក្សរបន្ទាត់។
  • របៀប មើលទៅក្រោយ អនុញ្ញាត​ឱ្យ​អ្នក​កំណត់​ក្នុង​កន្សោម​ធម្មតា​ថា​លំនាំ​មួយ​មុន​លំនាំ​មួយ​ទៀត (ឧទាហរណ៍ ការ​ផ្គូផ្គង​ចំនួន​ប្រាក់​ដុល្លារ​ដោយ​មិន​ចាប់​សញ្ញា​ប្រាក់​ដុល្លារ)។

Проект был осуществлён при участии разработчиков V8, которые со своей стороны провели работу по сокращению зависимости Irregexp от V8, и вынесли некоторые особенности, которые невозможно реализовать на базе SpiderMonkey, в отключаемые блоки «#ifdef». Сотрудничество оказалось взаимовыгодным. Со своей стороны разработчики Mozilla передали в Irregexp изменения, устраняющие некоторые ភាពមិនស៊ីសង្វាក់គ្នា។ с требованиями стандарта JavaScript и улучшающие качество кода. Также в ходе fuzzing-тестирования Firefox были выявлены и устранены ранее не замеченные ошибки в коде Irregexp, приводящие к крахам.

ប្រភព: opennet.ru

បន្ថែមមតិយោបល់