يقترحون مترجمًا لـ Python يستخدم تقنية النسخ والتصحيح

شعار Python

Python هي لغة برمجة عالية المستوى.

في الآونة الأخيرة واحدة من أهمها كشف مطورو CPython عن مترجم JIT جديد لبيثون باستخدام تقنية النسخ والتصحيحوهو تقنية تجميع حديثة ومبتكرة أن تتميز بسرعتها وسهولة صيانتها وتكاملها الكامل مع المترجم الحالي.

النسخ والتصحيح يعتمد على استخدام مكتبة محددة مسبقًا من أجزاء التعليمات البرمجية الثنائية المعروفة باسم "القوالب" لإخراج كود الجهاز الأمثل. هذه القوالب عبارة عن تطبيقات تم إنشاؤها مسبقًا لعقد AST (شجرة بناء الجملة المجردة) أو أكواد تشغيل البايت التي تحتوي على قيم مفقودة، مثل القيم الحرفية المباشرة، وإزاحات متغيرات المكدس، وأهداف الفروع والمكالمات.

فهو يسمح لك بإنشاء متغيرات من القوالب الثنائية بشكل منهجي في لغة C++ بطريقة نظيفة ونقية. يستخدم البنية التحتية للمترجم Clang + LLVM لإخفاء تفاصيل منصة معينة عند مستوى منخفض.

أثناء وقت التشغيل، يصبح التحسين وإنشاء التعليمات البرمجية مهامًا أبسطl ابحث عن جدول بيانات يحتوي على القالب المناسب، وقم بإنشاء مثيل له، ثم ضعه في الموضع المطلوب باستخدام عملية النسخ والتصحيح، وضبط أي قيم مفقودة ليتم تصحيحها في وقت التشغيل.

بالنظر إليها من منظور أبسط، فهي تتكون من تجميع (نسخ) كود المصدر الموجود وضبط القيم المفقودة أو تعديلات محددة (تصحيح).

تسهل خاصية النسخ والتصحيح بشكل كبير التحويل التلقائي للمترجم المكتوب بلغة C في مترجم JIT، مما يلغي الحاجة إلى إنشاء منطق توليد التعليمات البرمجية وتمثيلات التجميع بشكل منفصل. باستخدام منشئ الأكواد الشائعة، يؤدي إصلاح الأخطاء في المترجم إلى إصلاح تلقائي لنفس المشكلات في JIT.

يعتمد أسلوب النسخ والتصحيح على التشابه بين نقل التعليمات البرمجية في الذاكرة عندما يقوم الرابط بتحميل ملفات الكائنات، فإن استبدال تعليمات الجهاز بدلاً من الكود الثانوي في JIT يكون بمثابة مهام مشابهة. أثناء تنفيذ البرنامج، ليتم سرد تعليمات الرمز الثانوي التي أنشأها المترجم، ورمز الجهاز المترجم مسبقًا يتم نسخ كل تعليمات إلى منطقة الذاكرة القابلة للتنفيذ، ثم من هذه التعليمات يتم تعديلها ديناميكيًا لتحل محل البيانات المعالجة في الوقت الفعلي. في حالة JIT، يتم نسخ القوالب المحددة مسبقًا من الوظائف المجمعة بالفعل واستبدالها بالقيم الضرورية، مثل الوسائط والثوابت).

تنفيذ JIT بتقنية النسخ والتصحيح يتضمن تجميع ملف كائن بتنسيق ELF أوباستخدام LLVM. يحتوي هذا الملف المعترض عليه على معلومات حول تعليمات الرمز الثانوي وتفاصيل حول استبدال البيانات الضرورية. أثناء التنفيذ، يستبدل JIT تعليمات الرمز الثانوي التي تم إنشاؤها بواسطة المترجم بتمثيلات رمز الجهاز، مع ضبط البيانات اللازمة للحسابات في نفس الوقت. على الرغم من أن تطبيق JIT يتطلب LLVM باعتباره تبعية أثناء التجميع، إلا أن مكونات وقت التشغيل غير مرتبطة بالتبعيات الخارجية، مما يقلل إلى ما يقرب من 300 سطر من كود C المكتوب بخط اليد و3000 سطر من كود C الذي تم إنشاؤه.

من حيث الأداء ، JIT المقترح باستخدام تقنية النسخ والتصحيح يقدم تحسينات ملحوظة بالمقارنة مع الأساليب التقليدية. عند مقارنتها بـ JITs التقليدية (LLVM -O0)، فإنها تتميز بقدرتها على إنشاء كود أسرع 100 مرة والكود الناتج الذي إنه أكثر كفاءة بنسبة 15٪. في مجال تجميع WebAssembly (Liftoff)، تم استخدام JIT الجديد يوضح إنشاء تعليمات برمجية أسرع بمقدار 5 مرات، ويتم تشغيل التعليمات البرمجية الناتجة بشكل أسرع بنسبة 50%.

عند مقارنتها ببرنامج JIT للتحسين مثل LuaJIT، الذي يستخدم كود التجميع المكتوب يدويًا، تفوق أداء JIT المقترح في 13 اختبارًا من أصل 44. على الرغم من أنها تأخرت في الأداء بنسبة 35% في المتوسط، إلا أنه من الضروري تسليط الضوء على أن هذا الاختلاف يقابله تبسيط كبير في الصيانة وتقليل تعقيد التنفيذ. هذا التوازن بين الأداء والكفاءة في إدارة التعليمات البرمجية يضع JIT المقترح كبديل جذاب في مشهد الأداء.

الرجال النهائيونوإذا كنت مهتمًا بمعرفة المزيد عنها، يمكنك التحقق من التفاصيل في الرابط التالي.


اترك تعليقك

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها ب *

*

*

  1. المسؤول عن البيانات: ميغيل أنخيل جاتون
  2. الغرض من البيانات: التحكم في الرسائل الاقتحامية ، وإدارة التعليقات.
  3. الشرعية: موافقتك
  4. توصيل البيانات: لن يتم إرسال البيانات إلى أطراف ثالثة إلا بموجب التزام قانوني.
  5. تخزين البيانات: قاعدة البيانات التي تستضيفها شركة Occentus Networks (الاتحاد الأوروبي)
  6. الحقوق: يمكنك في أي وقت تقييد معلوماتك واستعادتها وحذفها.