تعلّم البرمجة بلغة كوتلن (5): المترجم والمفسر 

تعلّم البرمجة بلغة كوتلن (5): المترجم والمفسر 
أستمع الى المقال

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

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

في بعض الحالات، لا يقوم المترجم بترجمة الشيفرة المصدرية Source Code مباشرة، (الشيفرة المصدرية هي التعليمات التي نكتبها بلغة عالية المستوى مثل كوتلن، وهي تختلف عن لغة الآلة)، بل يقوم بإنشاء شفرة تسمى جافا بايت كود Java bytecode.

وهو تمثيل وسيط للشيفرة المصدرية قبل تحويلها إلى لغة الآلة، ليتم تشغيلها في الجهاز الافتراضي (Virtual Machine (VM للغة. أشهر مثال على ذلك، هو (Java Virtual Machine (JVM. يعمل الـ JVM، كمفسر interpreter لشيفرة Java bytecode إلى لغة الآلة. سنشرح أكثر عن المفسر لاحقًا في هذا المقال.

المترجم compiler:

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

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

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

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

المفسر interpreter:

لفهم الفرق بين عمل المترجم والمفسر فلننظر إلى الصورة التالية:

سلسلة خطوات المترجم والمفسر

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

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

لهذا السبب، تمتلك لغة البرمجة جافا Java مترجمًا compiler لترجمة الشفرة المكتوبة بلغة جافا عالية المستوى للغة آلة (Java bytecode)، تعمل على جهاز حاسب إفتراضي، والذي يسمى JVM كما قلنا في أعلى هذا المقال. ويحتوي حاسوب جافا الإفتراضي JVM هذا، على مفسر interpreter، لتنفيذ الـ bytecode على أي نظام تشغيل.

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

هذا الدرس هو جزء من سلسلة تعليم مبادئ البرمجة بلغة كوتلن. لمُتابعة الدروس منذ البداية ومُشاهدة فهرس المحتويات يمكنك الانتقال إلى الدرس الأول من هنا.

هل أعجبك المحتوى وتريد المزيد منه يصل إلى صندوق بريدك الإلكتروني بشكلٍ دوري؟
انضم إلى قائمة من يقدّرون محتوى إكسڤار واشترك بنشرتنا البريدية.