మొజిల్లా 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»).

మొజిల్లా 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{సంఖ్య} సంఖ్యలను (① వంటి చిహ్నాలతో సహా), \p{ఆల్ఫాబెటిక్} - అక్షరాలు (తో సహా) వర్ణించే అన్ని సాధ్యమైన అక్షరాలను నిర్వచిస్తుంది చిత్రలిపి ), \p{గణితం} — గణిత చిహ్నాలు మొదలైనవి.
  • జెండా డాట్ అన్నీ "." ముసుగును కాల్చడానికి కారణమవుతుంది. లైన్ ఫీడ్ అక్షరాలు సహా.
  • పాలన వెనుకకు చూడు ఒక సాధారణ వ్యక్తీకరణలో ఒక నమూనా మరొకదానికి ముందు ఉన్నట్లు గుర్తించడానికి మిమ్మల్ని అనుమతిస్తుంది (ఉదాహరణకు, డాలర్ చిహ్నాన్ని సంగ్రహించకుండా డాలర్ మొత్తాన్ని సరిపోల్చడం).

Проект был осуществлён при участии разработчиков V8, которые со своей стороны провели работу по сокращению зависимости Irregexp от V8, и вынесли некоторые особенности, которые невозможно реализовать на базе SpiderMonkey, в отключаемые блоки «#ifdef». Сотрудничество оказалось взаимовыгодным. Со своей стороны разработчики Mozilla передали в Irregexp изменения, устраняющие некоторые అసమానతలు с требованиями стандарта JavaScript и улучшающие качество кода. Также в ходе fuzzing-тестирования Firefox были выявлены и устранены ранее не замеченные ошибки в коде Irregexp, приводящие к крахам.

మూలం: opennet.ru

ఒక వ్యాఖ్యను జోడించండి