التوافق اللغوي
التوافق بين اللغات هو قدرة لغتين برمجة مختلفتين على التفاعل بشكل أصلي كجزء من نفس النظام والعمل على نفس نوع هياكل البيانات. [ 1 ]
تتعدد الطرق التي تتكامل بها لغات البرمجة مع بعضها البعض. فمثلاً، تتكامل لغات HTML و CSS و JavaScript لأنها تُستخدم معًا في صفحات الويب. كما تتكامل بعض لغات البرمجة كائنية التوجه بفضل آلة الاستضافة الافتراضية المشتركة (مثل لغات .NET CLI المتوافقة مع بيئة التشغيل المشتركة ، ولغات JVM المتوافقة مع آلة جافا الافتراضية ). [ 2 ]
أساليب التشغيل البيني
نماذج الكائنات
نماذج الكائنات هي نماذج موحدة تسمح بتمثيل الكائنات بطريقة مستقلة عن لغة البرمجة، بحيث يمكن استخدام نفس الكائنات عبر البرامج وعبر لغات البرمجة المختلفة. يُعدّ كل من CORBA و COM من أشهر نماذج الكائنات.
الآلات الافتراضية

الآلة الافتراضية (VM) هي لغة وسيطة متخصصة تُترجم إليها عدة لغات مختلفة. يمكن للغات التي تستخدم نفس الآلة الافتراضية أن تتفاعل فيما بينها، لأنها تشترك في نموذج ذاكرة ومترجم، وبالتالي يمكن إعادة استخدام مكتبات لغة ما للغات أخرى على نفس الآلة الافتراضية. يمكن للآلات الافتراضية دمج أنظمة أنواع لضمان صحة اللغات المشاركة وتوفير أساس مشترك لمعلومات أنواعها. يوفر استخدام لغة وسيطة أثناء الترجمة أو التفسير فرصًا أكبر للتحسين. [ 1 ]
واجهات الوظائف الخارجية

تتيح واجهات الدوال الخارجية (FFI) للبرامج المكتوبة بلغة برمجة معينة استدعاء دوال مكتوبة بلغة أخرى. غالبًا ما توجد اعتبارات تمنع التعامل مع الدوال الخارجية كدوال مكتوبة في لغة البرمجة الأصلية، مثل الاختلافات في أنواع البيانات ونموذج التنفيذ. تُمكّن واجهات الدوال الخارجية من إنشاء مكتبات وسيطة توفر وظائف من مكتبة بلغة أخرى في لغة البرمجة الأصلية، غالبًا بأسلوب أكثر ملاءمة لتلك اللغة. تحتوي معظم لغات البرمجة على واجهات دوال خارجية للغة C ، وهي اللغة الأكثر شيوعًا في البرمجة اليوم.
التحديات
اختلافات نموذج الكائن
تحاول لغات البرمجة كائنية التوجه ربط حاويات البيانات بالبرمجيات، لكن طريقة تحقيق ذلك تختلف من لغة لأخرى. ولا تُترجم قرارات التصميم هذه بسهولة إلى لغات أخرى. على سبيل المثال، لن تُترجم الفئات التي تستخدم الوراثة المتعددة من لغة تسمح بها إلى لغة لا تسمح بها. يتمثل أحد الحلول الشائعة لهذه المشكلة في تعريف مجموعة فرعية من لغة ما تتوافق مع خصائص لغة أخرى. [ 3 ] يعني هذا الحل أنه لكي تعمل البرمجيات التي تستخدم خصائص خارج المجموعة الفرعية، ستحتاج إلى تغليف بعض واجهاتها في فئات يمكن فهمها من قِبل المجموعة الفرعية.
نماذج الذاكرة
تُعدّ الاختلافات في كيفية تعامل لغات البرمجة مع تحرير الذاكرة مشكلة أخرى عند محاولة تحقيق التوافق بينها. فاللغات التي تعتمد على التحرير التلقائي للذاكرة لا تتوافق جيدًا مع تلك التي تعتمد على التحرير اليدوي، كما أن اللغات التي تعتمد على التدمير الحتمي للذاكرة لا تتوافق مع تلك التي تعتمد على التدمير غير الحتمي. وبناءً على قيود اللغة، توجد استراتيجيات عديدة للتوفيق بين هذه السلوكيات المختلفة. على سبيل المثال: يمكن لبرامج C++، التي تستخدم عادةً التحرير اليدوي للذاكرة، أن تتوافق مع جامع البيانات المهملة على غرار Java عن طريق تغيير سلوك التحرير لحذف الكائن، ولكن دون استعادة الذاكرة. وهذا يتطلب تحرير كل كائن يدويًا، حتى يتمكن جامع البيانات المهملة من تحرير الذاكرة بأمان.
التحولية
تُصبح قابلية التغيير مشكلةً عند محاولة تحقيق التوافق بين لغات البرمجة الوظيفية البحتة واللغات الإجرائية. فلغات مثل هاسكل لا تحتوي على أنواع قابلة للتغيير، بينما لا توفر لغة C++ ضمانات صارمة مماثلة. ولا يُمكن للعديد من أنواع البرمجة الوظيفية، عند ربطها بلغات البرمجة الكائنية، ضمان عدم تعديل الكائنات الأساسية.
انظر أيضاً
مراجع
- 1 2 مالون، تود (2014). "التوافقية في لغات البرمجة". CiteSeerX 10.1.1.684.337 .
{{cite journal}}يتطلب الاستشهاد بالمجلة ( مساعدة )|journal= - ↑ "التوافق بين اللغات" . شبكة مطوري مايكروسوفت (msdn.microsoft.com).
- ↑ تشيسنال، ديفيد (2013-10-01). "تحدي قابلية التشغيل البيني بين اللغات" . مجلة ACM Queue . 11 (10): 20-28 . doi : 10.1145/2542661.2543971 . ISSN 1542-7730 .
- لغات البرمجة
- قابلية التشغيل البيني
