بسم الله الرحمن الرحيم
إذا كان في اللغات التي تحتوي على مترجم (Compiler) يتم ترجمة الكود كاملا إلى لغة اﻵلة ثم ينتج ملف جديد جاهز للتغشيل ومترجم
بينما لا يتم ذلك في اللغات التي تحتوي على مفسر (interpreter) إذا كيف سيفهم الحاسب الشفرة وهي لن تترجم ؟
هو لا يترجمها أساس بل ينفذها أمر أمر كل مرة
الأمر معقد بعض الشيء إذا كنت تعرف الإنجليزية
إبحث على قوقل
هو لا يترجمها أساس بل ينفذها أمر أمر كل مرة
هذا هو سؤالي كيف سيفهم الحاسب وهو لا يترجمها إلى لغة اﻵلة
الحاسب ينفذ المفسر والمفسر ينفذ البرنامج
أحتاج إلى مفسّر لتفسير هذه الجملة :)
التعليقان
و
وضحا لي بعض اﻷشياء
شكرا لك ولهم
المفسر يقوم بقراءة و تحليل التعليمة, تماما مثلما يفعل المترجم,
و لكنه يختلف عنه فى التصرف الأخير, فالمترجم يقوم بتحويل التعليمة الى لغة الألة,
أما المفسر فيقوم بتنفيذها مباشرة بعد تحليلها بدون ترجمتها (أشهر مثال على ذلك مفسر البيسك).
بعض المفسرات مثل الجافا تقوم بترجمة الاكواد الى لغة وسيطة, ثم تقوم ماكينة افتراضية بتنفيذ هذه الاكواد الوسيطة.
لأنه بعد ترجمتها بالinterpreter نحصل على ملف جديد يتم ترجمته بالcompiler من جديد لذلك تعتبر لغات البرمجة التي تحتوي على interpreter أقل سرعة من اللغات الأخرى،
نحصل على ملف جديد
هل تقصد ملف غير مترجم إلى لغة اﻵلة أيضا ولكن بلغة وسيطة مثلا تفهمها بيئة التطوير ولكنها لا تزال تحتاج إلى ترجمة مرة أخرى
إذا كان كذلك فما الفائدة التي سنحصل عليها من هذه العملية لماذا لا تترجم مباشرة إلى لغة اﻵلة
كلامك صحيح لا نحصل على ملف بلغة الآلة machine language و لكن نحصل على intermediate language و هذا ما يمنح لغات مثل الجافا ما يسمى portability
أي اللغة المحمولة لأنها قادرة من ملف interpreted على ترجمتها إلى لغة آلة متوافقة مع processor architecture التي تعمل به الآلة سواء كانت هاتف محمول أو mac os أو windows
لست مختصًّا لكن هذه بعض المعلومات التي تعلمتها من قراءاتي، أرجو التصحيح إن كنت مخطئاً.
اللغة المفسرة تُستضاف على آلة افتراضية تقوم بترجمتها إلى لغة الآلة المناسبة للبيئة الحالية، مثلاً جافا صممت في الأساس لتكون محمولة (portable) ورُوّج لها بشعار "Write once, run everywhere"، في الوقت الذي كانت اللغات المُجمّعة تحتاج إلى أن تُجمّع لكل بيئة على حدة وإصدار النّصّ المجمّع بصيغة تنفيذية خاصة لكل نظام. أما في Java فإنها تُنتج ملف يحوي bytecode (يمكن أن نقول عنه أنه كود في حالة وسيطة، ليس مجمّعًا)، ثم كل ما على المستخدم أن يُشغّله بواسطة الآلة الافتراضية المُثبّتة على جهازه بغض النظر عن نوع المعالج. الفكرة الأساسية التي روُجت لـJava هي أن تُزيح عنك عناء الاهتمام بالاختلافات بين البيئات ونقل هذا العبء إلى الآلة الافتراضية.
جافاسكربت أيضًا مثال آخر، فهي تُكتب بنفس الطريقة لجميع الأنظمة وليس عليك نشر ملفات تنفيذية لكل نظام مثلاً، وإنما تقوم الآلة الافتراضية للمتصفح وراء الكواليس بتفسير النص وتجميعه بما يناسب بيئة المعالج الحالية.
سأعطيك مثالا:
لنفترض انك تجيد ترجمة اللغة الصينية الى الانجليزية و ترجمة الانجليزية الى العربية
قلت لك ترجم جملة خوان شوان هوان شي مي تي الى العربية هه لا اجيد الصينية ، على العموم كيف ستترجم
1-عليك ترجمتها من الصينية الى اللغة الانجليزية
2-ترجمة الانجليزية الى العربية
نفس الشيئ هنا بالنسبة للغات التفسيرية
(معلومة : الجملة التي كتبتها باللغة الصينية فوق لا تعني شيئ باللغة الهندوسية)
المفسر يحول الكود إلى لغة الآلة كذلك، لكن ليس بنفس أسلوب الـ compiler .
اللغات التي تعمل بمفسر فيها ميزات لا يمكن أن تكون في لغة مثل C لأن لغة الآلة غير نقالة، هي مصممة لتعمل على معالج محدد. فمثلا script يطبع كلمة ما في python نفس الملف سيعمل بدون تعديل على معالجات انتل 32 بت و 64 بت و معالجات ARM و كل منصة يدعمها المفسر.
لكن في C عليك أن تعمل compile لكل واحدة.
المفسر محسن لكي يترجم الـ script بسرعة و ينفذ مباشرة.
الـ compiler محسن لكي يترجم بسرعة لكي يخرج ملف تنفيذي. هذه العملية فيها خطوات كثيرة غير الترجمة، ابحث عن مراحل تحويل كود C إلى ملف تنفيذي جاهز.
ما فهمته كالتالي :
تفسير البرامج بدل ترجمتها طريقة لجؤوا لها لحل مشكلة تعدد المنصات، فالمترجم يقوم بترجمة الشفرة وينتج ملف تنفيذي ولكن يكون مخصص لمنصة معينة أو معالجات معينة بينما المفسر يقوم بترجمة الشفرة إلى لغة وسيطة تكون قريبة من الحاسب و مفهومة بالنسبة للغة البرمجة أو بيئة التطوير و عند تشغيل الملف يقوم برنامج بترجمة اللغة الوسيطة إلى لغة اﻵلة حسب كل منصة، أي أنه تم وضع اﻷوامر لكل منصة ولكن هذا ليس من شان المبرمج فالمفسر هو الذي يتولى مهمة اختيار اﻷمر المناسب للمنصة عند الترجمة
المترجم يقرأ أولا الشفرة المصدرية بالكامل يقوم بتحليلها فإذا كانت خالية من الأخطاء يحوّل هذه الشفرة إلى ملف بلغة الآلة جاهز للتنفيذ. (توجد خطوات أخري في المنتصف).
المفسّر يقوم بقراءة الشفرة المصدرية وتحويلها إلى لغة الآلة ثم تنفيذها ولكن تعليمة بعد تعليمة. يقرأ التعليمة الأولى يحوّلها للغة الآلة ثم ينفّذها، ثم يأتي للتعليمة التي تليها وهكذا. إذا صادف خطأ في إحدى التعليمات يتوقّف المفسّر عن العمل ، وإلا يستمرّ حتى تنتهى تعليمات كامل البرنامج.
ملاحظة كثير من اللغات لها مفسّر ومترجم.