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).
  • ການ​ອອກ​ຫ້ອງ​ຮຽນ​ ຕົວອັກສອນ Unicode ເພີ່ມໂຄງສ້າງ \p{…} ແລະ \P{…}, ສໍາລັບຕົວຢ່າງ, \p{Number} ກໍານົດຕົວອັກສອນທີ່ເປັນໄປໄດ້ທັງຫມົດດ້ວຍຮູບພາບຂອງຕົວເລກ (ລວມທັງຕົວອັກສອນເຊັ່ນ ①), \p{Alphabetic} - ຕົວອັກສອນ (ລວມທັງ hieroglyphs ), \p{Math} — ສັນຍາລັກທາງຄະນິດສາດ, ແລະອື່ນໆ.
  • Flag dotAll ເຮັດໃຫ້ຫນ້າກາກ "." ລວມທັງຕົວອັກສອນແຖວໃໝ່.
  • ຮູບແບບ ເບິ່ງທາງຫລັງ ອະນຸຍາດໃຫ້ທ່ານກໍານົດໃນການສະແດງປົກກະຕິວ່າຮູບແບບຫນຶ່ງກ່ອນຫນ້າອື່ນ (ຕົວຢ່າງ, ຈັບຄູ່ເງິນໂດລາໂດຍບໍ່ໄດ້ຈັບເຄື່ອງຫມາຍເງິນໂດລາ).

Проект был осуществлён при участии разработчиков V8, которые со своей стороны провели работу по сокращению зависимости Irregexp от V8, и вынесли некоторые особенности, которые невозможно реализовать на базе SpiderMonkey, в отключаемые блоки «#ifdef». Сотрудничество оказалось взаимовыгодным. Со своей стороны разработчики Mozilla передали в Irregexp изменения, устраняющие некоторые ຄວາມບໍ່ສອດຄ່ອງ с требованиями стандарта JavaScript и улучшающие качество кода. Также в ходе fuzzing-тестирования Firefox были выявлены и устранены ранее не замеченные ошибки в коде Irregexp, приводящие к крахам.

ແຫຼ່ງຂໍ້ມູນ: opennet.ru

ເພີ່ມຄວາມຄິດເຫັນ