رقعة القرود
تُعرف عملية التعديل الديناميكي (Monkey patch) بأنها تعديل كود وقت التشغيل (وليس الكود المصدري ) للغات البرمجة الديناميكية ، وهي المعلومات (البيانات/الكود) المستخدمة لتعديل كود وقت التشغيل. يُضيف التعديل الديناميكي أو يستبدل عناصر برمجية مثل الدوال ، والفئات ، والخصائص ، والوظائف في الذاكرة . يُتيح تعديل كود وقت التشغيل تغيير سلوك برامج الطرف الثالث دون الحاجة إلى الاحتفاظ بنسخة مُعدّلة من الكود المصدري.
يبدو أن مصطلح " تعديل الشفرة البرمجية" (monkey patch) مشتق من مصطلح سابق هو " تعديل الشفرة البرمجية الخفي " (guerrilla patch )، والذي كان يشير إلى تغيير الشفرة البرمجية خلسةً - وربما بشكل غير متوافق مع تعديلات أخرى مماثلة - أثناء التشغيل. كلمة "guerrilla" ، التي تكاد تكون متجانسة صوتيًا مع كلمة "gorilla" (غوريلا) ، أصبحت "monkey" ، ربما لجعل كلمة "تعديل الشفرة البرمجية" تبدو أقل ترهيبًا. [ 1 ]
على الرغم من دلالة الاسم، فإنّ "تعديل البرامج" (monkey patch) يُعدّ أحيانًا الطريقة الرسمية لتوسيع نطاق برنامج ما. فعلى سبيل المثال، كانت متصفحات الويب مثل فايرفوكس وإنترنت إكسبلورر تشجع على ذلك، مع أن المتصفحات اليوم (بما فيها فايرفوكس) تدعم التوسيع بطريقة مختلفة. [ 2 ]
يختلف مصطلح "Monkey patch" باختلاف السياق. ففي لغة روبي [ 3 ] ، وبايثون [ 4 ] ، ولغات أخرى، يشير "Monkey patch" فقط إلى التعديل الديناميكي لفئة أو وحدة برمجية أثناء التشغيل، بدافع تصحيح كود برمجي موجود تابع لجهة خارجية كحل بديل لخلل أو ميزة لا تعمل كما هو مطلوب. أما أشكال تعديل الفئات الأخرى أثناء التشغيل فلها مسميات مختلفة. على سبيل المثال، في Zope و Plone ، غالبًا ما تُقدَّم تصحيحات الأمان باستخدام التعديل الديناميكي للفئات، ولكنها تُسمى " إصلاحات عاجلة" .
المخاطر
بعض عيوب التعديل التلقائي للملفات:
- عدم التوافق
قد يؤدي إصدار جديد من البرنامج المُعدَّل إلى تعطيل التعديل. ولهذا السبب، قد يكون التعديل المشروط مشروطًا، وبالتالي لا يُطبَّق إلا عند الضرورة. [ 5 ]
- الكتابة فوق البيانات
إذا تم تعديل نفس الطريقة عدة مرات، فسيتم استخدام التعديل الأخير فقط؛ أما التعديلات الأخرى فلن يكون لها أي تأثير، إلا إذا تمت كتابة تعديلات "monkey patches" بنمط مثل alias_method_chain . [ 6 ]
- ارتباك
يُحدث تعديل البرامج (monkey patch) تباينًا بين الكود المصدري والسلوك الفعلي، مما قد يُربك المطورين. على سبيل المثال، يكشف نظام لينكس عن الوحدات النمطية الاحتكارية ووحدات الطرف الثالث الأخرى، مثل برنامج تشغيل Nvidia ، التي تُعدّل بنية النواة، وذلك لتجنب إضاعة المطورين وقتهم في محاولة تصحيح مشكلة لا يمكنهم حلها. [ 7 ]
- فوضى
قد تحتوي رقعة التعديل (Monkey Patch) على شيفرة خبيثة تهاجم البرنامج أو رقعًا أخرى. على سبيل المثال، في عام ٢٠٠٩، هاجم جورجيو ماوني، مطور NoScript ، إضافة Adblock Plus لمتصفح Firefox، مضيفًا استثناءات تسمح بعرض الإعلانات على مواقعه الإلكترونية. كما ضمنت الشيفرة الخبيثة إعادة إضافة هذه الاستثناءات تلقائيًا في حال محاولة المستخدم إزالتها. وتصاعدت حدة الصراع مع فرض قواعد جديدة لحجب الإعلانات على المستخدمين، ثم قام ماوني بتخريبها، مما دفع موزيلا في النهاية إلى التدخل لتغيير سياساتها المتعلقة بالإضافات. [ ٨ ]
أمثلة
يقوم الكود التالي بتعديل قيمة باي في مكتبة الرياضيات القياسية في بايثون لجعلها متوافقة مع قانون باي في ولاية إنديانا .
>>> استيراد وحدة الرياضيات >>> math.pi 3.141592653589793 >>> math.pi = 3.2 # تعديل قيمة باي في وحدة الرياضيات >>> math.pi 3.2في المرة القادمة التي يتم فيها تشغيل بايثون، ستكون قيمة باي كما كانت قبل التحديث: 3.141592653589793.
انظر أيضاً
مراجع
- ↑ "مسرد المصطلحات - تعريف "رقعة القرد"نظام إدارة المحتوى بلون . مؤرشف من الأصل بتاريخ 22 يناير 2021. تم الاطلاع عليه بتاريخ 2 يوليو 2021. عندما
يقوم شخص ما بإنشاء رقعة برمجية غير رسمية بعناية فائقة ويحاول تجنب أي معارك، فإنه يحاول جعلها تبدو أقل قوة بتسميتها رقعة برمجية غير رسمية
. - ↑ غوها، أرجون؛ فريدريكسون، ماثيو؛ ليفشيتس، بنجامين؛ سوامي، نيخيل (22-25 مايو 2011). "أمان مُتحقق منه لإضافات المتصفح". ندوة IEEE للأمن والخصوصية لعام 2011. الصفحات 115-130 . doi : 10.1109/SP.2011.36 . ISBN 978-1-4577-0147-4.
- ↑ ناتر، تشارلز أوليفر. "صقل الياقوت" . تشارلز أوليفر ناتر .
- ↑ بيسوال، بيمال. "تعديل البرامج في بايثون" . نصائح تقنية البرمجيات . حلول مايندفاير. مؤرشف من الأصل في 22 أغسطس 2012. تم الاطلاع عليه في 9 ديسمبر 2013 .
- ↑ زاكاس، نيكولاس سي. (2 مارس 2010). "جافا سكريبت قابلة للصيانة: لا تُعدّل الكائنات التي لا تملكها - مبرمج بشري" . مبرمج بشري .
- ↑ "جديد في ريلز: Module#alias_method_chain" . روبي أون ريلز .
- ↑ "النوى الملوثة - وثائق نواة لينكس" . www.kernel.org . تم الاطلاع عليه بتاريخ 12 يوليو 2020 .
- ↑ بول، رايان (4 مايو 2009). "موزيلا تدرس تغيير سياستها بعد معركة إضافات فايرفوكس" . آرس تكنيكا . تاريخ الاسترجاع: 12 يوليو 2020 .
- البرمجة الكائنية التوجه
- بنى البرمجة
