عن المشروع
RE2 هي مكتبة تعبيرات منتظمة فعالة ومبدئية تم تطويرها في الأصل في Google عام 2006. هدف تصميمها الأساسي هو السلامة، مما يضمن قدرتها على التعامل مع التعبيرات المنتظمة من مستخدمين غير موثوق بهم دون خطر الارتداد الكارثي أو هجمات حجب الخدمة. على عكس المحركات التقليدية مثل PCRE أو Perl أو وحدة re في Python، تضمن RE2 أن وقت المطابقة خطي في طول سلسلة الإدخال.
الخصائص الرئيسية تشمل:
- **السلامة**: تتجنب RE2 التكرار وتحد من استخدام الذاكرة عبر ميزانية قابلة للتكوين، وتفشل بأمان إذا استنفدت. هذا يمنع تجاوز المكدس ومشاكل وقت التشغيل الأسية الشائعة في محركات الارتداد.
- **الأداء**: على الرغم من أنها ليست أسرع دائماً من المحركات الأخرى في الأنماط البسيطة بسبب تكلفة التقييم المتوازي، إلا أنها توفر أداءً ثابتاً في التعبيرات المعقدة من خلال تقييم البدائل بالتوازي بدلاً من التسلسل.
- **دعم بناء الجملة**: في وضع Perl الافتراضي، تقبل معظم مشغلات Perl لكنها تستبعد تلك التي تتطلب الارتداد (مثل المراجع الخلفية، تأكيدات النظرات الأمامية/الخلفية). في وضع POSIX، تدعم بناء الجملة القياسي POSIX (egrep) مع مطابقة الأطول والأقصى لليسار.
- **معالجة Unicode**: تعمل RE2 على نقاط ترميز Unicode مباشرة ولا تقوم بالتطبيع. يجب على المستخدمين تطبيع المدخلات والأنماط مسبقاً إذا لزم الأمر.
تم تنفيذ المكتبة بلغة C++ وتتطلب مترجم C++17 ومكتبة Abseil. يمكن بناؤها باستخدام GNU make أو CMake أو Bazel. على الرغم من كونها أصلية لـ C++، توجد أغلفة رسمية لـ Python (`google-re2`)، وتوجد منافذ مجتمعية لـ Node.js و Java (RE2J) و JavaScript (RE2JS) و D و Erlang و OCaml و Perl و R و Ruby و WebAssembly. لغات أخرى مثل Go و Rust توفر مكتبات مشابهة تتبع مبادئ RE2 لكنها لا تشارك الكود معها.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.