هذا مكون إضافي لـ GCC ، والذي يرتبط ضد Libpython ، و (آمل) يتيح لك استدعاء البرامج النصية للبيثون التعسفية من داخل المترجم. الهدف هو السماح لك بكتابة مكونات الإضافات في GCC في Python.
البرنامج المساعد هو برنامج مجاني ، مرخص له بموجب GPLV3 (أو لاحقًا).
لا يزال في "مرحلة إثبات المفهوم التجريبية" ؛ توقع حوادث وتراسين (أنا جديد على الدواخل في مجلس التعاون الخليجي ، وربما أسيء فهم الأشياء).
من الممكن بالفعل استخدام هذا لإضافة أخطاء/تحذيرات برنامج التحويل البرمجي ، على سبيل المثال الفحوصات الخاصة بالمجال ، أو التحليل الثابت. أحد أهدافي في ذلك هو "تعليم" مجلس التعاون الخليجي حول الأخطاء الشائعة التي يرتكبها الناس عند كتابة ملحقات لـ Cpython ، ولكن يمكن استخدامه على سبيل المثال لتعليم GCC حول دلالات التنازل المرجعية لـ GTK ، أو حول قفل Kernel Linux ، أو حول سلامة الإشارة في واجهات برمجة التطبيقات.
وتشمل الأفكار الأخرى تصورات بنية الكود. بالنظر إلى مثيل gcc.CFG ، ستستخدم gccutils.render_to_dot(cfg) و gccutils.invoke_dot(cfg) GRAPHVIZ و EOG لرسم تصور مفيد لرسوم تدفق التحكم ، مما يوضح الكود المصدري الممتاز بتمثيل GIMPLE الداخلي لـ GCC.
يمكن رؤية الوثائق على:
http://gcc-python-plugin.readthedocs.io/en/latest/index.html
gcc-N-plugin-dev أو gcc-plugin-devel .أنا أستخدم:
يصنع
لبناء البرنامج المساعد وتشغيل الاختبارات
يمكنك أيضًا استخدام:
جعل العرض التوضيحي
لإظهار أخطاء التحويل البرمجي الجديدة.
كان التطوير على x86_64 ولا أعرف إلى أي مدى سيكون متوافقًا مع البنى الأخرى.
لا يوجد مثبت حتى الآن. من الناحية النظرية ، يجب أن تكون قادرًا على إضافة هذه الحجج إلى استدعاء GCC:
gcc -fplugin = python.so -fplugin-arg-python-script = path_to_script.py other_args
واجعله تشغيل البرنامج النصي الخاص بك عند بدء تشغيل البرنامج المساعد.
يضيف المكون الإضافي تلقائيًا المسار المطلق إلى دليله الخاص إلى نهاية SYS.Path ، حتى يتمكن من العثور على وحدات دعم ، مثل GCCUTILS.Py و LIBCPYCHECKER.
API الدقيق لا يزال في التدفق. يمكنك الاتصال حاليًا بالأحداث عن طريق تسجيل عمليات الاسترجاعات على سبيل المثال لاستدعاء كل وظيفة في المصدر بممرات مختلفة.
إنه يعرض أنواع GCC المختلفة ككائنات Python ، داخل وحدة "GCC". يمكنك رؤية واجهة برمجة التطبيقات عن طريق الجري:
استيراد GCC مساعدة (GCC)
من داخل البرنامج النصي.
هذا حاليا ثلاثة مشاريع في واحد:
gcc-python-* : البرنامج المساعد لـ GCC. نقطة الإدخال ( init_plugin ) في gcc-python.c .
libcpychecker و cpychecker.py : مكتبة Python (ونص برنامج تشغيل) ، مكتوبة للمكون الإضافي ، حيث أقوم ببناء تحذيرات جديدة للمترجم لمساعدة الناس في العثور على الأخطاء في رمز امتداد Cpython.
cpybuilder : وحدة مفيدة لإنشاء رمز مصدر C بشكل برمجي لتمديدات CPYthon. أستخدم هذا كلاهما لإنشاء أجزاء من البرنامج المساعد GCC ، وكذلك في الاختبارات الذاتية لنص CPYCHECKER. (حاولت في البداية استخدام Cython للأولى ، لكن لف التسلسل الهرمي "شجرة" يتطلب المزيد من التحكم في البرمجي)
نمط الترميز: لدى كل من Python و GCC دليل نمط الترميز الخاص بهما لـ C. لقد اخترت متابعة Python's (PEP-7) ، كما أفضله (على الرغم من أن الكود الخاص بي هو فوضى في الأماكن).
ستجد وثائق API ضمن دليل "المستندات" ، المكتوب بتنسيق إعادة الهيكلة (كما هو الحال في هذا الملف ، في الواقع). إذا كنت قد قمت بتثبيت sphinx ، فيمكنك تجديد هذه المستندات باستخدام:
جعل HTML
داخل دليل docs . Sphinx هي حزمة python-sphinx على مربع Fedora/Rhel.
يمكن رؤية المزيد من الوثائق التفصيلية ضمن docs/getting-involved.rst .
يتمتع! David Malcolm <[email protected]>