جرعة كبيرة
برنامج SWIG ( مولد الواجهات والأغلفة المبسطة ) هو أداة برمجية مفتوحة المصدر تُستخدم لربط برامج أو مكتبات الحاسوب المكتوبة بلغة C أو C++ بلغات البرمجة النصية مثل Lua و Perl و PHP و Python و R و Ruby و Tcl ، بالإضافة إلى تطبيقات لغات أخرى مثل C# و Java و JavaScript و Go و D و OCaml و Octave و Scilab و Scheme . ويمكن أن يكون الناتج بصيغة XML .
وظيفة

الهدف هو تمكين لغات برمجة أخرى من استدعاء الدوال الأصلية (المكتوبة بلغة C أو C++)، وتمرير أنواع البيانات المعقدة إلى تلك الدوال، ومنع تحرير الذاكرة بشكل غير مناسب، وتوريث فئات الكائنات بين اللغات، وما إلى ذلك. يكتب المبرمج ملف واجهة يحتوي على قائمة بدوال C/C++ المراد عرضها للمفسر. يقوم SWIG بتجميع ملف الواجهة وإنشاء كود بلغة C/C++ العادية ولغة البرمجة المستهدفة. يُنشئ SWIG كود تحويل للدوال ذات الوسائط البسيطة؛ أما كود تحويل أنواع الوسائط المعقدة فيجب على المبرمج كتابته. تُنشئ أداة SWIG كود المصدر الذي يربط بين C/C++ ولغة البرمجة المستهدفة. وبحسب اللغة، يأتي هذا الربط بثلاثة أشكال:
- مكتبة مشتركة يمكن للمترجم الحالي ربطها كنوع من وحدات الإضافة، أو
- مكتبة مشتركة يمكن ربطها ببرامج أخرى تم تجميعها في اللغة المستهدفة (على سبيل المثال، باستخدام واجهة Java الأصلية (JNI) في Java).
- شفرة مصدر مكتبة ديناميكية مشتركة يجب تجميعها وتحميلها ديناميكيًا (مثل ملحقات Node.js الأصلية)
لا يتم استخدام SWIG لاستدعاء الدوال المفسرة بواسطة التعليمات البرمجية الأصلية؛ يجب على المبرمج القيام بذلك يدويًا.
مثال
يقوم SWIG بتغليف تعريفات لغة C البسيطة عن طريق إنشاء واجهة تُحاكي بدقة طريقة استخدام هذه التعريفات في برنامج C. على سبيل المثال، انظر إلى ملف الواجهة التالي: [ 4 ]
مثال على الوحدة النمطية%inline % { extern double sin ( double x ); extern int strcmp ( const char * , const char * ); extern int Foo ; % } #define STATUS 50 #define VERSION "1.1"يحتوي هذا الملف على دالتين sin()و strcmp()، ومتغير عام Foo، وثابتين STATUSو VERSION. عند إنشاء وحدة إضافية باستخدام SWIG، يمكن الوصول إلى هذه التصريحات كدوال ومتغيرات وثوابت في لغة البرمجة النصية على التوالي. في بايثون:
>>> example.sin ( 3 ) 0.141120008 >>> example.strcmp ( " Dave " , " Mike " ) -1 >>> print ( example.cvar.Foo ) 42 >>> print ( example.STATUS ) 50 >>> print ( example.VERSION ) 1.1غاية
هناك سببان رئيسيان لتضمين محرك برمجة نصية في برنامج C/C++ موجود:
- يمكن بعد ذلك تخصيص البرنامج بسرعة أكبر بكثير، باستخدام لغة برمجة نصية بدلاً من لغة C/C++ . بل ويمكن إتاحة محرك البرمجة النصية للمستخدم النهائي، ليتمكن من أتمتة المهام الشائعة عن طريق كتابة البرامج النصية.
- حتى لو لم يكن المنتج النهائي يحتوي على محرك البرمجة النصية، فقد يكون مفيدًا جدًا لكتابة نصوص الاختبار.
هناك عدة أسباب لإنشاء مكتبات ديناميكية يمكن تحميلها في المفسرات الموجودة، بما في ذلك:
- توفير إمكانية الوصول إلى مكتبة C/C++ التي ليس لها مكافئ في لغة البرمجة النصية.
- اكتب البرنامج بأكمله بلغة البرمجة النصية أولاً، وبعد إجراء التحليل ، أعد كتابة التعليمات البرمجية ذات الأهمية البالغة للأداء بلغة C أو C++.
تاريخ
برنامج SWIG مكتوب بلغة C و C++، وهو متاح للعموم منذ فبراير 1996. المؤلف والمطور الرئيسي للبرنامج هو ديفيد إم. بيزلي، الذي طوره أثناء دراسته العليا في مختبر لوس ألاموس الوطني وجامعة يوتا ، وأثناء عمله كعضو هيئة تدريس في جامعة شيكاغو . ويتلقى البرنامج حاليًا دعمًا من مجموعة نشطة من المتطوعين بقيادة ويليام فولتون. وقد تم إصدار SWIG بموجب رخصة جنو العمومية العامة .
برنامج جوجل الصيفي للبرمجة
شارك مشروع SWIG بنجاح في برنامج Google Summer of Code في أعوام 2008 و2009 و2012. في عام 2008، حصل SWIG على أربعة مقاعد. أمضى هاويو باي صيفه في تطوير الواجهة الخلفية لـ SWIG باستخدام Python 3.0، وعمل جان جيزابيك على دعم إنشاء أغلفة COM ، وقضت شيريل فويل وقتها في تطوير "مترجم" التعليقات لـ SWIG، وعمل ماسيج دروال على الواجهة الخلفية بلغة C. في عام 2009، شارك SWIG مجددًا في برنامج Google Summer of Code، وهذه المرة شارك أربعة طلاب. عمل باوزينغ دينغ على وحدة Scilab ، وقضى ماتيفز جيكوفيتش وقته في تطوير ميزات C++0x ، وقضى أشيش شارما صيفه في تطوير وحدة Objective-C ، وقضى ميكلوس فاجنا وقته في تطوير موجهات PHP.
في عام ٢٠١٢، شاركت SWIG في برنامج Google Summer of Code. هذه المرة، أنجز أربعة من أصل خمسة طلاب المشروع بنجاح. عمل ليف ميدلشولت على وحدة برمجية بلغة C. وقامت سواتي شارما بتحسين وحدة Objective-C. وأضافت نيها نارانج وحدة جديدة بلغة JavaScript. أما ديمتري كاباك، فقد عمل على توثيق شفرة المصدر وتعليقات Doxygen .
البدائل
بالنسبة للغة بايثون، يتم توفير وظائف مماثلة بواسطة SIP و Pybind11 ومكتبة Boost.python الخاصة بـ Boost .
مشاريع تستخدم SWIG
- ZXID (رخصة أباتشي، الإصدار 2.0)
- Symlabs SFIS (تجاري)
- LLDB
- GNU Radio حتى الإصدار 3.8.xx (بما في ذلك)؛ تستخدم الإصدارات اللاحقة Pybind11 [ 5 ]
- زابيان
- TensorFlow
- أباتشي سينغا
- مكتبة الكم
- بابلتريس
انظر أيضاً
- تجليد لغوي
- واجهة الوظائف الخارجية (FFI)
- اتفاقية الاتصال
- تشويه الأسماء
- واجهة برمجة التطبيقات
- واجهة التطبيق الثنائية
- مقارنة بين الأجهزة الافتراضية للتطبيقات
- دالة التغليف
- GIWS هو عكس SWIG: استدعاء Java من C/C++
مراجع
- ↑ "تاريخ SWIG" .
- ↑ "الإصدار 4.3.0" . تم الاطلاع عليه بتاريخ 10 ديسمبر 2024 .
- ↑ مقتبس من: عمار نجاتي، ميخائيل سفيتشنيكوف، يواكيم ووتكه: نشر برمجيات C++ مع (أو بدون) تضمين وتوسيع بايثون. في: بيرنوث وآخرون، محررو: deRSE24 - مساهمات مختارة من المؤتمر الرابع لهندسة برمجيات البحث في ألمانيا. ECEASST 83 (2025) .
- ↑ "أساسيات SWIG" .
- ↑ مولر، ماركوس. "سجل التغييرات لبرنامج GNU Radio 3.9.0.0" . جيت هاب .
للمزيد من القراءة
- مقال بعنوان " اكشف عن واجهة برمجة التطبيقات الداخلية لبرنامج C/C++ الخاص بك باستخدام SWIG سريع " بقلم فيكتور فولكمان
- مقال بعنوان " إضافات بايثون في لغة C++ باستخدام SWIG " بقلم مايكل فوتش
- عرض تقديمي بعنوان " نظرة عامة على التطبيقات لنظام openSUSE " من إعداد كلاوس كامبف
روابط خارجية
- برامج متعددة المنصات
- أدوات برمجة الكمبيوتر المجانية
- أدوات البرمجة
- لغات البرمجة النصية
