يجب ترجمة كل سطر من التعليمات البرمجية تكتبه إلى لغة يمكن لجهاز الكمبيوتر الخاص بك فهمها. لكن كيف يحدث ذلك؟

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

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

ما هو المترجم؟

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

instagram viewer

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

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

ما هو المترجم؟

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

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

الاختلافات الرئيسية

يعتبر كل من المترجمين الفوريين والمترجمين شائعين ، لذلك من المفيد معرفة الاختلافات الرئيسية بينهما.

تنفيذ الكود: معالجة الإدخال والإخراج

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

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

التصحيح وتتبع الأخطاء

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

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

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

الأداء والسرعة

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

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

على سبيل المثال ، يعالج متصفح Chrome JavaScript باستخدام محرك V8 ؛ يعمل هذا على مترجم Just-In-Time (JIT). وحدة Pyinstaller هي مساعد آخر يقوم بتجميع وترجمة نص Python في حزمة قابلة للتنفيذ.

في حين أن هؤلاء المساعدين مفيدون لتجميع لغة مفسرة في مترجم ، إلا أنه لا يغير حقيقة أن المترجم الأساسي لا يزال مترجمًا.

استخدام الذاكرة

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

على سبيل المثال ، عند فحص ملف ملف تعريف استخدام الذاكرة لرمز Python الخاص بك، قد يفاجئك مقدار الذاكرة التي تستهلكها.

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

دعم لغة البرمجة

المترجم والمترجم لهما نصيب عادل من توزيع لغة البرمجة. تتضمن بعض اللغات المترجمة الشائعة C و C # و Rust و Golang. تحظى اللغات المترجمة بشعبية أيضًا ، من بينها Python و JavaScript و PHP.

يميل المزيد من المبرمجين إلى تفضيل اللغات المفسرة. بينما يستخدم JavaScript و Python مترجمين فوريين ، فإنهما اللغتان الأكثر رغبة بشكل عام ، وفقًا لـ استبيان مطور 2023 Stack Overflow. يمثل Rust و C # المجموعات المجمعة في الموضعين الخامس والسادس.

حيث تتألق اللغات المفسرة

يتألق المترجمون الفوريون في هذه المجالات:

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

حيث تكسب اللغات المترجمة

ماذا عن المجمعين؟ فيما يلي بعض الجوانب التي تُظهر لغاتهم بعض القوة:

  • عادةً ما تكون اللغات المُجمَّعة أسرع في التنفيذ ، وتتطلب ذاكرة وقت تشغيل أقل نظرًا لأن ترجمة التعليمات البرمجية تحدث مرة واحدة فقط مقدمًا.
  • يساعد التنفيذ بعد التجميع في الكشف المبكر عن الأخطاء. يضمن المترجم فشل النشر بمجرد حدوث خطأ. هذا أفضل من اكتشاف الأخطاء أثناء وقت التشغيل.
  • على الرغم من أن اللغات المترجمة مكتوبة بشكل ثابت ، فإنها تحدد بوضوح أهداف المتغيرات والوظائف ، مما يجعلها أكثر توثيقًا.

اختيار المترجم المناسب لمشروعك

كما رأيت ، فإن للمترجم والمترجم الفوري مجالات تخصصهما حيث يتفوقان فيها. بينما يؤكد بعض المبرمجين أن اللغات المترجمة أسرع وأفضل بشكل عام ، يجادل البعض الآخر بأن الأداء يعتمد على بنية الكود والنظام الأساسي.

ولكن الأهم من ذلك ، يجب أن يعتمد اختيارك للمترجم أيضًا على عدة عوامل أخرى إلى جانب آلياتها الفنية. تعد سهولة التعلم والمجتمع وهدف المشروع من بين العوامل التي يجب مراعاتها أثناء الاختيار بين اللغات المترجمة والمترجمة.