باي باي

باي باي ( تُلفظ / ˈpaɪpaɪ / ) هي تطبيق للغة البرمجة بايثون . [ 2 ] غالبًا ما يكون أداء باي باي أسرع بكثير من تطبيق CPython القياسي ، وذلك لأن باي باي يستخدم مُصرّفًا فوريًا . [ 3 ] يعمل معظم كود بايثون بشكل جيد على باي باي، باستثناء الكود الذي يعتمد على إضافات CPython، والذي إما لا يعمل أو يُسبب بعض التأخير عند تشغيله على باي باي.

تعتمد PyPy نفسها على تقنية تُعرف باسم التتبع الفائق ، وهي عملية تحويل تلقائية في معظمها، تأخذ مترجمًا فوريًا كمدخل وتُنتج مُجمِّعًا فوريًا للتتبع كمخرج. ولأن كتابة المترجمات الفورية أسهل عادةً من كتابة المُجمِّعات ، ولكنها أبطأ، فإن هذه التقنية تُسهِّل إنتاج تطبيقات فعّالة للغات البرمجة. تُسمى مجموعة أدوات التتبع الفائق في PyPy باسم RPython .

يدعم PyPy رسميًا Python 2.7 و 3.11 [ 4 ] ، ويختلف في بعض جوانب التنفيذ مقارنةً بـ CPython. [ 5 ]

التفاصيل والدوافع

يهدف PyPy إلى توفير إطار عمل مشترك للترجمة والدعم لإنتاج تطبيقات للغات الديناميكية ، مع التركيز على الفصل بين مواصفات اللغة وجوانب التنفيذ. كما يهدف إلى توفير تطبيق متوافق للغة البرمجة بايثون باستخدام إطار العمل المذكور أعلاه ، مما يتيح ميزات متقدمة جديدة دون الحاجة إلى تضمين تفاصيل منخفضة المستوى. [ 6 ] [ 7 ]

RPython

يُكتب مُفسِّر PyPy نفسه بلغة فرعية مُقيَّدة من بايثون تُسمى RPython (بايثون المُقيَّدة). [ 8 ] تفرض RPython بعض القيود على لغة بايثون بحيث يُمكن استنتاج نوع المتغير في وقت الترجمة. [ 9 ]

طوّر مشروع PyPy مجموعة أدوات لتحليل كود RPython وترجمته إلى شكل من أشكال الكود الثنائي ، والذي يمكن تحويله إلى لغة C. كانت هناك سابقًا لغات برمجة أخرى إلى جانب C ( مثل Java و C# و JavaScript )، ولكنها أصبحت قديمة ومتهالكة وتم إزالتها. لذا، فإن شعار PyPy المتكرر هو ثعبان يبتلع نفسه، لأن RPython يُترجم بواسطة مترجم Python . يمكن أيضًا تشغيل الكود بدون ترجمة لأغراض الاختبار والتحليل، مما يوفر بيئة اختبار ممتازة لأبحاث اللغات الديناميكية.

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

كما تم استخدام RPython لكتابة تطبيقات لغات غير لغة بايثون، مثل لغة مبنية على لغة ليسب تسمى Pixie. [ 11 ]

حالة المشروع

يتوافق PyPy، بدءًا من الإصدار 7.3.17، مع إصدارين من CPython : 2.7 و3.10. [ 12 ] [ 13 ] أول إصدار من PyPy متوافق مع CPython v3 هو PyPy v2.3.1 (2014). [ 14 ] يُعرف مُفسِّر PyPy المتوافق مع CPython v3 أيضًا باسم PyPy3.

يدعم PyPy الترجمة الفورية (JIT) على معالجات x86 و ARM بنظامي 32 بت و64 بت . [ 15 ] ويتم اختباره يوميًا على أنظمة Windows وLinux وOpenBSD وMac OS X. يستطيع PyPy تشغيل برامج Python خالصة لا تعتمد على ميزات خاصة بالتنفيذ. [ 16 ]

توجد طبقة توافق لامتدادات واجهة برمجة تطبيقات C الخاصة بـ CPython تُسمى CPyExt، لكنها غير مكتملة وتجريبية. الطريقة المُفضلة للتفاعل مع مكتبات C المشتركة هي من خلال واجهة الدوال الخارجية المدمجة في C (CFFI) أو مكتبات ctypes .

تاريخ

يُعدّ PyPy امتدادًا لمشروع Psyco ، وهو مُصرّف مُخصّص للغة بايثون يعمل في الوقت الفعلي ، وقد طوّره أرمين ريغو بين عامي 2002 و2010. يهدف PyPy إلى توفير مُصرّف مُخصّص يعمل في الوقت الفعلي مع نطاق، وهو ما لم يكن مُتاحًا في Psyco. في البداية، كان من الممكن أيضًا ترجمة RPython إلى بايت كود جافا ، و CIL، وجافا سكريبت ، ولكن تمّت إزالة هذه الواجهات الخلفية لقلة الاهتمام بها.

كان مشروع PyPy في البداية مشروعًا بحثيًا وتطويريًا. وبعد أن وصل إلى مرحلة متقدمة من التطوير وأصدر النسخة الرسمية 1.0 في منتصف عام 2007، انصبّ تركيزه التالي على إصدار نسخة جاهزة للاستخدام في بيئات الإنتاج مع توافق أكبر مع CPython. وقد أُجريت العديد من التغييرات على PyPy خلال دورات تطوير مكثفة .

  • في أغسطس 2008، أصبح PyPy قادراً على تشغيل بعض مكتبات بايثون الشائعة مثل Pylons ، [ 17 ] و Pyglet ، [ 18 ] و Nevow، [ 19 ] و Django . [ 20 ]
  • في 12 مارس 2010، تم إصدار PyPy 1.2، مع التركيز على السرعة. وقد تضمن مُصرّفًا يعمل، وإن لم يكن مستقرًا بعد، يعمل في الوقت المناسب. [ 21 ]
  • في 30 أبريل 2011، تم إصدار PyPy الإصدار 1.5، والذي وصل إلى التوافق مع CPython 2.7. [ 22 ]
  • في 9 مايو 2013، تم إصدار PyPy 2.0، الذي قدم دعمًا تجريبيًا (ألفا) لتجميع JIT على معالجات ARMv6 وARMv7 JIT، وتضمن CFFI في المكتبة القياسية. [ 23 ] [ 24 ]
  • في 20 يونيو 2014، تم الإعلان عن استقرار PyPy3 [ 14 ] وقدم التوافق مع Python 3 الأكثر حداثة. تم إصداره جنبًا إلى جنب مع PyPy 2.3.1 ويحمل نفس رقم الإصدار.
  • في 21 مارس 2017، أصدر مشروع PyPy الإصدار 5.7 من كل من PyPy و PyPy3، حيث قدم الأخير دعمًا تجريبيًا لـ Python 3.5. [ 25 ]
  • في 26 أبريل 2018، تم إصدار النسخة 6.0، مع دعم Python 2.7 و 3.5 (لا تزال نسخة تجريبية على نظام Windows). [ 26 ]
  • في 11 فبراير 2019، تم إصدار الإصدار 7.0، مع دعم Python 2.7 و 3.5. [ 27 ]
  • في 14 أكتوبر 2019، تم إصدار الإصدار 7.2، مع دعم Python 3.6.9. [ 28 ]
  • في 24 ديسمبر 2019، تم إصدار الإصدار 7.3، مع دعم Python 3.6.9. [ 29 ]
  • في 16 فبراير 2020، أعلن فريق PyPy عن نقل استضافة شفرة المصدر من Bitbucket إلى heptapod.net، بما في ذلك مستودعات مشروع CFFI ( واجهة الوظائف الخارجية للغة C ). كما تم نشر شعار جديد وتصميم جديد للموقع الإلكتروني. مع ذلك، لا يزال اسم مصمم الشعار الجديد وترخيصه غير معروفين. [ 30 ]
  • في 29 ديسمبر 2023، أعلنت PyPy أن الاستضافة قد انتقلت إلى GitHub وأن التطوير سيتم تتبعه الآن باستخدام git . [ 31 ]

التمويل

مُوِّل مشروع PyPy من قِبَل الاتحاد الأوروبي كمشروع بحثي مُوجَّه مُحدَّد [ 32 ] بين ديسمبر 2004 ومارس 2007. وفي يونيو 2008، أعلن PyPy عن تمويله كجزء من برامج جوجل مفتوحة المصدر، ووافق على التركيز على جعله أكثر توافقًا مع CPython . وفي عام 2009، قبلت Eurostars، وهي وكالة تمويل تابعة للاتحاد الأوروبي تُركِّز بشكل خاص على الشركات الصغيرة والمتوسطة [ 33 اقتراحًا من أعضاء مشروع PyPy بعنوان "PYJIT - مجموعة أدوات سريعة ومرنة للغات البرمجة الديناميكية القائمة على PyPy". واستمر تمويل Eurostars حتى أغسطس 2011 [ 34 ]. وفي مؤتمر PyCon US 2011، قدَّمت مؤسسة برمجيات بايثون منحة قدرها 10,000 دولار أمريكي لـ PyPy لمواصلة العمل على الأداء والتوافق مع الإصدارات الأحدث من اللغة [35]. وقد رعت مؤسسة Raspberry Pi جزئيًا عملية نقل PyPy إلى معمارية ARM [ 23 ] .

يقبل مشروع PyPy التبرعات أيضًا عبر صفحات مدونته الخاصة بآخر المستجدات. [ 36 ] اعتبارًا من عام 2013، كان هناك تمويل لمجموعة متنوعة من المشاريع الفرعية: التوافق مع إصدار Python 3، ودعم NumPy المدمج والمُحسَّن للحسابات العددية، ودعم ذاكرة المعاملات البرمجية لتحسين التوازي. [ 23 ]

انظر أيضاً

ملحوظات

  1. "إصدار PyPy v7.3.23" .
  2. ^ "مقابلة مع ماسيج فيجالكوفسكي باي باي" . 29 نوفمبر 2015.
  3. "PyPy Speed" . speed.pypy.org . تم الاطلاع عليه بتاريخ 1 ديسمبر 2019 .
  4. ^ "باي باي" . 30 ديسمبر 2024.
  5. "الاختلافات بين PyPy وCPython — وثائق PyPy" . 30 ديسمبر 2024.
  6. سامويل بيدروني (مارس 2007). "PyPy - نظرة عامة على الأهداف والبنية" . مؤرشف من الأصل في 14 يونيو 2012.
  7. "PyPy – نظرة عامة على الأهداف والبنية – بيان المهمة" . تم الاطلاع عليه بتاريخ 11 أكتوبر 2013 .
  8. مترجم وقت التشغيل لدينا هو "RPython" ، دليل البرمجة - وثائق PyPy
  9. "إنها مجموعة فرعية مناسبة من بايثون، مقيدة بطريقة تمكن من التحليل السهل وتوليد التعليمات البرمجية بكفاءة"، أنكونا وآخرون، 2007.
  10. بولز، كارل؛ كوني، أنطونيو؛ فيالكوفسكي، ماسيج؛ ريغو، أرمين. تتبع المستوى الفوقي: مُجمِّع PyPy للتتبع الفوري . ICOOOLPS '09. doi : 10.1145/1565824.1565827 .
  11. مقابلة مع تيموثي بالريدج .
  12. "PyPy – التوافق مع بايثون" . pypy.org . 28 ديسمبر 2019. تم الاطلاع عليه بتاريخ 15 ديسمبر 2020 .
  13. "PyPy v7.3.7: إصدار لإصلاح الأخطاء في الإصدارين 3.7 و3.8" . pypy.org . 25 أكتوبر 2021. تاريخ الاسترجاع : 10 نوفمبر 2021 .
  14. 1 2 فريق PyPy (20 يونيو 2014). "PyPy3 2.3.1 - نقطة ارتكاز" . مدونة باي باي.
  15. "PyPy v7.2.0: إصدار 2.7 و 3.6" . pypy.org . 16 أكتوبر 2019.
  16. "توافق PyPy مع بايثون" . 28 ديسمبر 2019.
  17. "تشغيل الأبراج فوق PyPy" . 10 يونيو 2008.
  18. "تشغيل Pyglet فوق PyPy" . 20 فبراير 2008.
  19. "تشغيل Nevow على PyPy" . 20 يونيو 2008.
  20. "PyPy يشغل django 1.0 beta بدون تعديل" . 19 أغسطس 2008.
  21. "تقديم إصدار PyPy 1.2" . 30 أبريل 2011.
  22. "إصدار PyPy 1.5: اللحاق بالركب" . 12 مارس 2010.
  23. 1 2 3 جيك إيدج (15 مايو 2013). "نظرة على إصدار PyPy 2.0" . LWN.net .
  24. ^ "PyPy 2.0 – أينشتاين ساندويتش" . 9 مايو 2013.
  25. "PyPy2.7 و PyPy3.5 v5.7 - إصداران في واحد" . 21 مارس 2017.
  26. "إصدار مزدوج لـ PyPy2.7 و PyPy3.5 v6.0" . 26 أبريل 2018.
  27. ^ كوني ، أنطونيو (2019-02-11). "مدونة حالة PyPy: PyPy v7.0.0: الإصدار الثلاثي 2.7 و3.5 و3.6-alpha" . مدونة حالة PyPy . تم الاسترجاع 2020-08-17 .
  28. ^ ماتيب (2019-10-14). "مدونة حالة PyPy: تم إصدار PyPy v7.2" . مدونة حالة PyPy . تم الاسترجاع 2020-08-17 .
  29. ^ ماتيب (2019-12-24). "مدونة حالة PyPy: تم إصدار PyPy v7.3.0" . مدونة حالة PyPy .
  30. "تم نقل PyPy و CFFI إلى Heptapod" . 16 فبراير 2020.
  31. "انتقل PyPy إلى Git و GitHub" . 29 ديسمبر 2023.
  32. "مدخل خدمة معلومات البحث والتطوير التابعة للاتحاد الأوروبي" .
  33. "يوروستارز - اطمح إلى أعلى" .
  34. "صفحة المشروع على شبكة يوريكا" . مؤرشفة من الأصل بتاريخ 2012-04-03 . تم الاطلاع عليها بتاريخ 2011-10-17 .
  35. "شكرًا لمؤسسة PSF" . 22 مارس 2011.
  36. مدونة حالة PyPy: بالمناسبة، يحصل PyPy على تمويل من خلال "Eurostars"" . 10 ديسمبر 2010.

مراجع