مفسر (برمجة)

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

  • تجزئة الشيفرة المصدرية وتنفيذها مباشرةً؛
  • ترجمة الشيفرة المصدرية إلى لغة وسيطة فعالة وتنفيذها فورًا؛
  • التنفيذ الصريح لشيفرة مخزنة مسبقًا[1] أنشأها مترجمٌ يُعدّ جزءًا من نظام المفسر.

تُعد الإصدارات الأولى من لغة البرمجة ليسب ولغة دارتموث بيسيك أمثلة على النوع الأول. وتُعد لغات بيرل، وبايثون، وماتلاب، وروبي أمثلة على النوع الثاني، في حين تُعد لغة يو سي إس دي باسكال مثالًا على النوع الثالث. تُترجم البرامج المصدرية قبل وقت محدد وتُخزن على شكل شيفرة مستقلة عن الآلة، ثم تُربط في وقت التنفيذ وينفّذها مفسرٌ و/أو مترجم (لأنظمة الترجمة في الوقت المناسب). إن بعض الأنظمة، مثل سمول توك والإصدارات المعاصرة من لغات بيسيك وجافا، قد تجمع اثنين أو ثلاثة.[2] بُنيت المفسرات من أنواع مختلفة من أجل العديد من لغات البرمجة المقترنة بالترجمة، كلغة ألغول، وفورتران، وكوبول، وَسي، وَسي بلس بلس.

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

تاريخهعدل

استُخدمت المفسرات منذ عام 1952 لتسهيل البرمجة مع وجود قيود على الحواسيب في ذلك الوقت (مثل نقص مساحة تخزين البرامج، أو عدم وجود دعم في الأصل للأعداد الحقيقية (ذات الفاصلة العائمة)). كانت المفسرات تُستخدم أيضًا للترجمة بين لغات الآلة المنخفضة المستوى، وتسمح بكتابة الكود لآلات كانت ما تزال قيد البناء، وتخضع للاختبار على حواسيب موجودة مسبقًا.[3] كانت اللغة المفسرة الأولى هي لغة ليسب. نُفذت لغة ليسب أولًا في عام 1958 من قبل ستيف راسيل على حاسوب آي بي إم 704. كان راسيل قد قرأ ورقة جون مكارتي البحثية وأدرك أن تابع إيفال eval في لغة ليسب قابل للتنفيذ في شيفرة الآلة.[4] كانت النتيجة هي مفسر للغة ليسب يمكن استخدامه لتنفيذ برامج ليسب، أو بعبارة أدق «لتقييم تعابير ليسب».

دورة التطويرعدل

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

مراجععدل

  1. ^ In this sense, the CPU is also an interpreter, of machine instructions.
  2. ^ Although this scheme (combining strategy 2 and 3) was used to implement certain BASIC interpreters already in the 1970s, such as the efficient BASIC interpreter of the ABC 80, for instance.
  3. ^ Bennett, J. M.; Prinz, D. G.; Woods, M. L. (1952). "Interpretative sub-routines". Proceedings of the ACM National Conference, Toronto. الوسيط |CitationClass= تم تجاهله (مساعدة)
  4. ^ According to what reported by بول غراهام in Hackers & Painters, p. 185, McCarthy said: "Steve Russell said, look, why don't I program this eval..., and I said to him, ho, ho, you're confusing theory with practice, this eval is intended for reading, not for computing. But he went ahead and did it. That is, he compiled the eval in my paper into IBM 704 machine code, fixing bug, and then advertised this as a Lisp interpreter, which it certainly was. So at that point Lisp had essentially the form that it has today..."

وصلات خارجيةعدل