You are on page 1of 6

‫ما هو الفرق بين المُترجم والمُفسّر في عالم لغات البرمجة؟‬

‫‪Compiler vs Interpreter‬‬

‫سر هي برامج تساعد في تحويل اللغة عالية المستوى (كود المصدر) إلى أكواد آلة لكي تفهمها‬ ‫المترجم وال ُمف ّ‬
‫أجهزة الكمبيوتر‪ .‬عادة ما تتم كتابة برامج الكمبيوتر بلغات عالية المستوى‪ ،‬واللغة عالية المستوى هي اللغة التي‬
‫يمكن أن يفهمها البشر‪ .‬لتوضيح ذلك‪ ،‬تحتوي هذه اللغات على كلمات وعبارات من اللغات الشائعة االستخدام‬
‫مثل اإلنجليزية‪ ،‬مع ذلك‪ ،‬ال تستطيع أجهزة الكمبيوتر فهم اللغات عالية المستوى كما نفعل نحن البشر‪ .‬يمكنهم‬
‫فقط فهم البرامج التي تم تطويرها في األنظمة الثنائية المعروفة باسم كود اآللة‪ .‬بادئ ذي بدء‪ ،‬عادة ما تتم كتابة‬
‫برنامج الكمبيوتر بلغة عالية المستوى توصف بأنها كود المصدر‪ ،‬ويجب تحويل هذا الكود إلى لغة آلة وهنا‬
‫يأتي دور المترجم والمُفسّر‪.‬‬

‫ما هو المترجم ‪Compiler‬‬


‫المترجم هو برنامج كمبيوتر يحوّ ل الكود (التعليمات البرمجية) المكتوب بلغة برمجة عالية المستوى إلى كود‬
‫اآللة‪ ،‬وهو برنامج يقوم بترجمة الكود الذي يمكن قراءته من قبل اإلنسان إلى لغة يفهمها معالج الكمبيوتر (ثنائي‬
‫‪ 1‬و ‪ 0‬بت)‪ ،‬يعالج الكمبيوتر كود اآللة ألداء المهام المقابلة‪ .‬يجب أن يلتزم المترجم بقاعدة بناء الجملة‬
‫الخاصة بلغة البرمجة التي ُكتب بها‪ ،‬مع ذلك‪ ،‬فإن المترجم ليس سوى برنامج وال يمكنه إصالح األخطاء‬
‫الموجودة في هذا البرنامج‪ .‬لذلك‪ ،‬إذا قمت بخطأ ما‪ ،‬فأنت بحاجة إلى إجراء تغييرات في بناء جملة برنامجك‪.‬‬
‫خالف ذلك‪ ،‬لن يتم تجميعها‪.‬‬

‫ما هو ال ُمفسر ‪Interpreter‬‬


‫المُفسر أو المترجم الفوري هو برنامج كمبيوتر والذي يُحوّ ل كل جملة في البرنامج عالي المستوى إلى كود‬
‫اآللة‪ ،‬يتضمن الكود المصدري تعليمات البرمجية المُجمعة مسب ًقا والنصوص‪ .‬يقوم كل من المترجم والمُفسر‬
‫بنفس المهمة (وهي تحويل لغة البرمجة عالية المستوى إلى كود اآللة)‪ .‬مع ذلك‪ ،‬سيقوم المترجم بتحويل الكود‬
‫إلى كود آلة (أي إنشاء ملف ‪ ).exe‬قبل تشغيل البرنامج‪ ،‬لكن يقوم المُفسر بتحويل الكود إلى كود اآللة عند‬
‫تشغيل البرنامج‪.‬‬
‫وظائف المترجم‬

‫يقرأ المترجم الكود المصدري‪ ،‬ويخرج الكود القابل للتنفيذ‪.‬‬ ‫‪-‬‬

‫يترجم البرامج المكتوبة بلغة عالية المستوى‪ S‬إلى تعليمات يستطيع الكمبيوتر فهمها‪.‬‬ ‫‪-‬‬

‫فهو يحوّ ل النص الذي يكتبه المبرمج إلى تنسيق يمكن أن تفهمه وحدة المعالجة المركزية‪.‬‬ ‫‪-‬‬

‫عملية التجميع معقدة نسبيًا‪ ،‬يقضي الكثير من الوقت في تحليل البرنامج ومعالجته‪.‬‬ ‫‪-‬‬

‫النتيجة القابلة للتنفيذ هي شكل من أشكال الكود الثنائية الخاصة بالجهاز‪S.‬‬ ‫‪-‬‬

‫وظائف ال ُمفسر‬

‫يقوم المُفسر بتحويل الكود المصدر‪ S‬سطراً بسطر أثناء وقت التشغيل‪.‬‬ ‫‪-‬‬

‫المُفسر يترجم برنامجً ا مكتو ًبا‪ S‬بلغة عالية المستوى إلى لغة على مستوى اآللة‪.‬‬ ‫‪-‬‬

‫يسمح المُفسر بتقييم البرنامج وتعديله أثناء تنفيذه‪.‬‬ ‫‪-‬‬

‫يتم قضاء وقت أقل نسبيًا في تحليل البرنامج ومعالجته‪.‬‬ ‫‪-‬‬

‫تنفيذ البرنامج بطيء نسبيًا مقارنة بالمترجم‪.‬‬ ‫‪-‬‬


‫المترجمات والمفسرات‪ :‬مساوئ وحسنات‬

‫برنامج تنفيذيّ متين‪ ،‬وذلك بفضل مراحل التحليل‬ ‫توّ فر المترجمات ً‬


‫آلية ممتازة من أجل توليد‬
‫ٍ‬
‫والتحسين التي يتم تنفيذها أثناء عملية الترجمة‪ ،‬واألهم من ذلك فإنه وبعد انتهاء الترجمة وبناء‬
‫البرنامج التنفيذيّ (ملف بصيغة ‪ exe‬على سبيل المثال) فإنه سيكون باإلمكان تشغيل البرنامج‬
‫فوراً بدون الحاجة لتحليله وترجمته في كل مرة‪ ،‬وهذا ما يوّ فر سرعة تنفيذ عالية‪ .‬على صعي ٍ‪S‬د‬
‫آخر‪ ،‬وبسبب المراحل التي تتضمنها عملية الترجمة‪ ،‬فإن عملية بناء البرنامج التنفيذيّ تستغرق‬
‫وقتا ً طويالً مقارنة مع التنفيذ المباشر الذي تقوم به المفسرات‪ ،‬كما أن عملية‪ ‬البحث عن األخطاء‬
‫ً‬
‫صعبة نوعا ً ما في المترجمات نظراً لكونها تقوم بتحليل كامل الشيفرة‬ ‫‪ Debugging‬تعتبر‬
‫المصدرية وعند نهاية عملية الترجمة والبناء سيتم عرض كافة رسائل الخطأ المكتشفة في كل‬
‫البرنامج‪ .‬أخيراً‪ ،‬وبما أن عملية الترجمة تنتهي بتوليد ملفٍ تنفيذيّ قابل للتشغيل بأي وقت‪ ،‬فإن‬
‫هذا يعني ضرورة حجز مساح ٍة إضافية في الذاكرة للبرنامج والمتحوالت‪ S‬والتعليمات والمكتبات‬
‫التي يتضمنها‪S.‬‬

‫بشكل مباشر‪ ،‬فإنها تساهم بتوفير الوقت المرتبط بإنجاز‬


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

‫البشر مهووسون بالمقارنات التي من شأنها إظهار خياراتهم‪ S‬على أنها األصح‪ .‬نحن مهووسون‬
‫بالفوز‪ ،‬وهذا ينطبق أيضا ً على البرمجة‪ .‬يوجد مبرمجون متعصبون مستعدون‪ S‬للنقاش ساعا ٍ‬
‫ت‬
‫وساعا ٍ‬
‫ت إلقناعك أن لغة البرمجة التي يجيدونها‪ S‬ويفضلونها هي “األفضل” وأن أسلوب البرمجة‬
‫الذي يتبعونه هو األنجح وأن اعتمادهم على لغ ٍة مترجمة (أو مفسرة) هو المفتاح للسعادة‬
‫األبدية‪.‬‬

‫هل استخدام اللغات المفسرة أفضل من اللغات المترجمة؟ أو العكس؟ الجواب على هذا السؤال‬
‫بسيط جداً‪ :‬كما في كل شيء آخر بالحياة‪ ،‬مفهوم “األفضل” هو مفهو ٌم نسبيّ ‪ .‬استخدام لغة‬
‫بشكل أساسيّ للمجال المستهدف والتطبيق‪ S‬المراد إنشاؤه‪ .‬لغة‬
‫ٍ‬ ‫برمجة بدالً من األخرى يتبع‬
‫بايثون تمتلك شهر ًة كبيرة بمجال تحليل البيانات وتطبيقات معالجة الصورة والذكاء الصنعيّ‬
‫وتعلم اآللة‪ ،‬ولذلك فإن الراغبين بالغوض بأحد هذه المجاالت سيُفضل غالبا ً التوجه وتعلم لغة‬
‫بشكل كبير في مجال برمجة األنظمة المضمنة وأنظمة التشغيل‪ ،‬ولذلك‬
‫ٍ‬ ‫بايثون‪ .‬لغة سي تستخدم‬
‫فإن من يرغب بالغوض بهذا المجال سيُفضل غالبا ً تعلم لغة سي‪ .‬ال أعتقد أن هنالك “أفضل”‪،‬‬
‫وقد أكون مخطئا ً في ذلك‪ ،‬إال أن األكيد هو أن البحث عن األفضل والسعي‪ S‬إلثبات “األفضل”‬
‫بمشروع جديد أو تحسين‬
‫ٍ‬ ‫هو إضاعة لوق ٍ‬
‫ت يمكن استثماره في تعلم لغة برمجة جديدة أو البدء‬
‫مشروع ومنتج موجو ٍد أصالً‪.‬‬
‫ٍ‬

You might also like