طرق ربط لغات البرمجة مع بعضها

طرق ربط لغات البرمجة مع بعضها

يعتمد تحديد اللغة البرمجية التي ستستخدم في برمجة المشروع على عدة العوامل، مثل نظام التشغيل الذي يتم برمجة المشروع من أجله, سهولة كتابة الكود (Syntax)، حجم المجتمع الذي يستخدمها و الداعم لها و الذي سيساعدك في إيجاد حلول للمشاكل التي تواجهك عند استخدامها، بالإضافة إلى المكتبات المشهورة المكتوبة بها و التي تستخدم لتسريع العمل.

عادةً ما تحمل المشاريع الكبيرة خواصاً مختلفة يصعب جمعها في لغة واحدة. كمثال بسيط موقع هرمش يستخدم لغة Javascript لجعل المستخدم قادر على إرسال تعليقات على المقالات و بنفس الوقت يستخدم لغة PHP ليستقبل التعليقات التي يرسلها المستخدمين و التشييك عليها لمعرفة ما إن كانت قد تسبب ضرر للموقع في حال كانت تحتوي على كود خبيث, أو أنها تحتوي على كلام سيئ و عندها إن وجد أنه لا مشكلة فيها تقوم بحفظها في قاعدة البيانات و من ثم ترسل لنا رسالة تخبرنا بأنه يوجد تعليق جديد تم إضافته. هنا قد يقلق المبتدئ من صعوبة ربط اللغات مع بعضها ظناً منه أن هذا أمر صعب جداً و يتطلب خبرة كبيرة. في الواقع هذا الأمر سهل جداً و لكنه يتطلب فقط دراسة و اتباع طرق معينة لربط البيانات التي تتبادلها لغات البرمجة بشكل صحيح.هناك عدة طرق يعتمد اختيارك لإحداها على مشروعك، و سنقوم بشرح كل طريقة على أنه لدينا برنامجين، البرنامج الأساسي مكتوب بلغة البرمجة الأساسية في المشروع، و البرنامج المساعد مكتوب بلغة برمجية أخرى.

1- التواصل عن طريق واجهة برمجية

بعض لغات البرمجة تكون توفر لك مجموعة دوال يقال لها واجهة برمجية (API) تسمح بالتواصل مع لغات أخرى، فمثلاً يمكن لبرنامج مكتوب بلغة Java استدعاء دوال مكتوبة بلغة ++C عن طريق واجهة برمجية مخصصة لذلك إسمها JNI التي هي اختصار لجملة Java Native Interface.

هناك الكثير من الأمثلة للغات أخرى كذلك، و تعد هذه الطريقة هي المثلى لربط لغتي برمجة لما توفره من سهولة التواصل.

2- التواصل عن طريق موجه الأوامر

تعتبر لطريقة المباشرة و الأكثر بساطة لربط لغتين لا تسمحان بالتواصل مباشرة مع بعضهما، إذ يقوم فيها البرنامج الأساسي باستخدام موجه الأوامر في نظام التشغيل بتشغيل البرنامج المساعد و تمرير البيانات اللازمة له، فإذا فرضنا مثلاً أن البرنامج المساعد مكتوب بلغة Python كالتالي.

import sys
print("Hello " + sys.argv[1])

و البرنامج الأساسي مكتوب بلغة Java و يريد تشغيل البرنامج المكتوب بلغة Python سيكون الكود كالتالي.

import java.io.*;
public class Main {
    public static void main(String[] args) throws Exception {
        Process process = Runtime.getRuntime().exec("python helper.py Rami");
        BufferedReader stdInput = new BufferedReader(new InputStreamReader(process.getInputStream()));
        System.out.println(stdInput.readLine());}

هنا عند تشغيل الكود المكتوب بلغة Java سيقوم بإرسال أمر مباشر لموجه الأوامر يطلب منه أن يشغل مفسّر لغة Python حتى ينفذ الأوامر الموجودة في الملف helper.py مع تمرير الكلمة Hello له أيضاً.

عند تنفيذ الأوامر الموجودة في الملف helper.py سيقوم بوضع الكلمة Hello التي مررناها له إلى بشكل مؤقت في المصفوفة sys.argv و من بعدها سيقوم بطباعتها على الشاشة حتى يخرجها للبرنامج المكتوب بلغة Java.

في النهاية سيقوم البرنامج المكتوب بلغة Java بقراءة المخرجات التي نتجت عن تنفيذ الملف helper.py و يطبعها.

معلومة

يمكن تطبيق نفس الفكرة باستخدام أغلب لغات البرمجة، و تتميز هذه الطريقة عن غيرها بأنها تعمل بشكل محلي و يمكنها تمرير الأوامر بسهولة، و ينصح عند الحاجة لتبادل البيانات الكبيرة كتابتها على ملف و تمرير إسم الملف بدلاً من البيانات كاملة للبرنامج المساعد.

3- الإتصال عن طريق الشبكة Network

يمكن للبرنامج الأساسي و البرنامج المساعد التواصل عن طريق localhost أو شبكة الإنترنت، و يتم تبادل البيانات بهذه الطريقة عن طريق بروتوكول معين مثل HTTP أو WebSocket، و تتميز هذه الطريقة عن غيرها بإمكانية تشغيل البرنامج المساعد على جهاز آخر يسمى حينها خادماً (Server).

لتتوضح الأمور قليلا عليك فهم كيف تعمل الشبكة.

صورة توضح طبقات الشبكة تبعا لنموذذج OSI (المصدر GeeksForGeeks.org , تحت رخصة CC BY-SA 4.0)m أول ثلاث طبقات في الأسفل هم طبقات الأجزاء المادية (Hardware)، و تكون هذه الطبقات مسؤولة بشكل عام عن نقل البيانات الرقمية Digital على شكل نبضات كهربائية في الأسلاك أو على شكل إشعاع كهرومغناطيسي، و تليها طبقة النقل Transport المسؤولة عن إدارة نقل البيانات بين الجهازين و من بروتوكولاتها TCP و UDP، و الطبقة الأخيرة هي طبقة البرمجيات Software، و هذه الطبقة التي تبرمج فيها البروتوكولات المعروفة مثل HTTP و WebSocket و وظيفة هذه البروتوكولات هي تبادل البيانات بين الجهازين بحيث يفهم كل طرف ما الذي يتم تبادله و كيف يتم تبادله، و يبدأ كل بروتوكول عملية المراسلة بعملية المصافحة (Handshaking)  وهي أول ما يتم إرساله من المستخدم إلى الخادم ليخبره فيها عن البروتوكول الذي يريد التواصل به معه و عن معلومات أخرى أيضاً تعتمد على نوع البروتوكول، و يقوم الخادم بعدها بالرد عليه بالإيجاب و يرسل معلومات أخرى أيضاً. الآن الفرق الرئيسي بين البروتوكولين HTTP و WebSocket هو أن HTTP يقوم على إرسال المستخدم طلباً إلى الخادم ويرد عليه الخادم ثم يغلق الاتصال، و لا يستطيع بعدها الخادم التعرف على المستخدم إن قام بإرسال طلب آخر. في المقابل البروتوكول Websocket يقوم على إنشاء اتصال مستمر بين المستخدم و الخادم، و لا ينقطع الاتصال إلا عندما يقرر ذلك أحد الطرفين مما يسمح بتبادل البيانات بشكل مستمر.
إذاً يمكنك اختيار أحد الوسيلتين تبعاً لاحتياجك فإن كان طلباً و جواباً فقط تستخدم HTTP و إن كان احتياجك هو تبادل معلومات بشكل مستمر  وإن كانت لفترة قصيرة تستخدم Websocket.

4- مشروع GraalVM

لمواكبة آخر التطورات يجب علينا ذكر هذا المشروع الرائد الذي طورته شركة Oracle عام 2019، و هو آلة Java افتراضية تدعم عدة لغات برمجة أخرى مثل JavaScript، Ruby، R و Python حيث يمكن لأي لغة منهم استخدام اللغات الأخرى، و هذا مثال على كود JavaScript يقوم بتنفيذ كود Python.



تواصل معنا !
فرع السعودية

(+966) 563215250

فرع السعودية
فرع مصر

(+020) 1050224848

فرع مصر

0228120106

فرع مصر

(+966) 563215250

فرع السعودية
فرع دبي

(+971) 543098007

فرع دبي
البريد الإلكتروني
مواعيد العمل

24 ساعة يوميا - 7 أيام فى الأسبوع