pybind11 - إمكانية التشغيل السلس بين C++ 11 وPython
مثال على أدوات الإعداد • مثال Scikit-build • مثال CMake
pybind11 هي مكتبة خفيفة الوزن للرؤوس فقط، تعرض أنواع C++ في Python والعكس، وذلك بشكل أساسي لإنشاء روابط Python لكود C++ الحالي. تشبه أهدافها وصياغتها مكتبة Boost.Python الممتازة التي أنشأها ديفيد أبراهامز: لتقليل التعليمات البرمجية المعيارية في وحدات الامتداد التقليدية عن طريق استنتاج معلومات النوع باستخدام الاستبطان في وقت الترجمة.
المشكلة الرئيسية في Boost.Python – والسبب وراء إنشاء مثل هذا المشروع المماثل – هي Boost. Boost عبارة عن مجموعة كبيرة ومعقدة للغاية من مكتبات الأدوات المساعدة التي تعمل مع كل مترجم C++ موجود تقريبًا. هذا التوافق له تكلفته: تعد حيل القالب الغامضة والحلول البديلة ضرورية لدعم أقدم وأصعب نماذج المترجمات. الآن بعد أن أصبحت المترجمات المتوافقة مع C++ 11 متاحة على نطاق واسع، أصبحت هذه الآلات الثقيلة بمثابة تبعية كبيرة جدًا وغير ضرورية.
فكر في هذه المكتبة باعتبارها نسخة صغيرة قائمة بذاتها من Boost.Python مع إزالة كل شيء غير ذي صلة بإنشاء الارتباط. بدون تعليقات، تتطلب ملفات الرأس الأساسية فقط سطورًا من التعليمات البرمجية بدقة 4K تقريبًا وتعتمد على Python (3.8+ أو PyPy) ومكتبة C++ القياسية. كان هذا التنفيذ المدمج ممكنًا بفضل بعض ميزات لغة C++ 11 (على وجه التحديد: الصفوف ووظائف لامدا والقوالب المتنوعة). منذ إنشائها، تطورت هذه المكتبة إلى ما هو أبعد من Boost.Python بعدة طرق، مما أدى إلى كود ربط أبسط بشكل كبير في العديد من المواقف الشائعة.
يتم توفير الوثائق التعليمية والمرجعية على pybind11.readthedocs.io. نسخة PDF من الدليل متاحة هنا. والكود المصدري متاح دائمًا على github.com/pybind/pybind11.
يمكن لـ pybind11 تعيين ميزات C++ الأساسية التالية إلى Python:
std::shared_ptr
بالإضافة إلى الوظائف الأساسية، يوفر pybind11 بعض الميزات الإضافية:
constexpr
)، مما يؤدي إلى ثنائيات أصغر.تم إنشاء هذا المشروع بواسطة وينزل جاكوب. ساهم جوناس أدلر، ولوري أ. بيرنز، وسيلفان كورلاي، وإريك كوزينو، وآرون جوكاسلان، ورالف جروس-كونستليف، وترينت هوليستون، وأكسيل هوبل، ويانك جادول، وسيرجي ليسكوف، ويوهان في ميزات و/أو تحسينات مهمة على الكود. مابيل، توماس ميشسكو، دين مولدوفان، بن بريتشارد، وجيسون راينلاندر، وبوريس شيلينج، وبيم شيلارت، وهنري شراينر، وإيفان سميرنوف، وبوريس ستاليتش، وباتريك ستيوارت.
نشكر Google على مساهمتها المالية السخية في البنية التحتية للتكامل المستمر التي يستخدمها هذا المشروع.
راجع دليل المساهمة للحصول على معلومات حول البناء والمساهمة في pybind11.
يتم توفير pybind11 بموجب ترخيص نمط BSD الذي يمكن العثور عليه في ملف الترخيص. باستخدام هذا المشروع أو توزيعه أو المساهمة فيه، فإنك توافق على شروط وأحكام هذا الترخيص.