انتقلت Mozilla إلى استخدام محرك التعبير العادي المشترك مع Chromium

محرك جافا سكريبت SpiderMonkey الخاص بفايرفوكس مترجم لاستخدام تطبيق محدث للتعبيرات العادية بناءً على الكود الحالي إيرجكسب من محرك JavaScript V8 المستخدم في المتصفحات المستندة إلى مشروع Chromium. سيتم اقتراح تطبيق جديد لـ RegExp في إصدار 78 يونيو من Firefox 30، وسيسمح للمتصفح بتنفيذ جميع عناصر ECMAScript المفقودة المتعلقة بالتعبيرات العادية.

تجدر الإشارة إلى أن محرك RegExp في SpiderMonkey مصمم كمكون منفصل، مما يجعله مستقلاً نسبيًا ومناسبًا للاستبدال دون الحاجة إلى إجراء تغييرات كبيرة على قاعدة التعليمات البرمجية. تم السماح بالنمطية في عام 2014 لاستبدال محرك YARR RegExp المستخدم أصلاً في Firefox بشوكة محرك Irregexp من V8. يرتبط Irregexp بـ V8 API، ويرتبط بمجمع البيانات المهملة، ويستخدم تمثيل سلسلة خاص بـ V8 ونموذج الكائن. في عملية التكيف مع واجهة برمجة التطبيقات الداخلية لـ SpiderMonkey في عام 2014، تمت إعادة كتابة محرك Irregexp جزئيًا، والتغييرات التي تظهر، مثل العلامة '\u'، حيثما أمكن ذلك تحمل إلى شوكة تحتفظ بها موزيلا.

لسوء الحظ، فإن الحفاظ على شوكة متزامنة أمر صعب ويتطلب الكثير من الموارد للمحافظة عليه. مع تقديم الميزات الجديدة المتعلقة بالتعبيرات العادية في معيار ECMAScript 2018، بدأ مطورو Mozilla في التفكير في كيفية نقل التغييرات بسهولة من Irregexp. كمخرج، تم اقتراح مفهوم الربط، والذي يسمح باستخدام محرك Irregexp الذي لم يتغير تقريبًا في SpiderMonkey (تنحصر التغييرات فقط في الاستبدال التلقائي للكتل "#include").

انتقلت Mozilla إلى استخدام محرك التعبير العادي المشترك مع Chromium

يوفر الربط لـ Irregexp الميزات الضرورية الخاصة بـ V8، بما في ذلك إدارة الذاكرة ووظائف إنشاء التعليمات البرمجية، بالإضافة إلى هياكل البيانات الأولية التي يتم تنفيذها على أساس آليات إدارة الذاكرة ومولدات التعليمات البرمجية وهياكل SpiderMonkey.

سيسمح تحديث محرك RegExp لـ Firefox بدعم ميزات مثل اللقطات المسماة، والهروب من فئات أحرف Unicode، وعلامة dotAll، ووضع Lookbehind:

  • المجموعات المسماة السماح لك بربط أجزاء من سلسلة مطابقة بتعبير عادي بأسماء معينة بدلاً من الأرقام التسلسلية للمطابقات (على سبيل المثال، بدلاً من "/(\d{4})-(\d{2})-(\d{ 2})/"يمكنك تحديد"/(؟ \د{4})-(؟ \د{2})-(؟ \d{2})/" والوصول إلى السنة ليس من خلال النتيجة[1]، ولكن من خلال result.groups.year).
  • الهروب من الفصول الدراسية تضيف أحرف Unicode بنيات \p{…} و\P{…}، على سبيل المثال، يحدد \p{Number} جميع الأحرف الممكنة مع صورة الأرقام (بما في ذلك الأحرف مثل ①)، \p{Alphabetic} - الحروف (بما في ذلك الهيروغليفية )، \p{Math} — الرموز الرياضية، وما إلى ذلك.
  • علم دوتال يسبب القناع "." بما في ذلك أحرف السطر الجديد.
  • نظام الحكم انظر خلفك يسمح لك بتحديد نمط يسبق نمطًا آخر في التعبير العادي (على سبيل المثال، مطابقة مبلغ بالدولار دون التقاط علامة الدولار).

تم تنفيذ المشروع بمشاركة مطوري V8، الذين عملوا من جانبهم على تقليل اعتماد Irregexp على V8، ونقلوا بعض الميزات التي لا يمكن تنفيذها بناءً على SpiderMonkey إلى كتل "#ifdef" المعطلة. أثبت التعاون أنه مفيد للطرفين. من جانبهم، قدم مطورو Mozilla تغييرات على Irregexp أدت إلى إزالة بعض التغييرات التناقضات مع متطلبات معيار جافا سكريبت و تحسين جودة الكود. أيضًا، أثناء اختبار التشويش لمتصفح Firefox، تم تحديد وإصلاح أخطاء لم تتم ملاحظتها مسبقًا في كود Irregexp، مما أدى إلى حدوث أعطال.

المصدر: opennet.ru

إضافة تعليق