الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

ما الفرق بين compailer and interpreter

مغلق
بدأه hamzah hussein في 11 أبريل 2007 · 3 رد · 7,521 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بسم الله الرحمن الرحيم

compailer and interpreterيرجى أن تعطوني الفرق بين

#2

أخي الكريم رح اجاوبك بس على قد معرفتي ويمكن الشباب يصححوا لي لو وجدوا أخطاء ..

الكومبايلر هو الذي يترجم البرنامج الذي كتبته ( طبعاً بعد التأكد من صحة الـ Syntax ) بلغة عالية المستوى مثل c++ إلى ما يسمى بالـ object code وهو كود مكتوب بالـ hex numbers وهذا الكود يمثل أوامر مباشرة للـ cpu الموجود بجهازك ، فهذا الكود يعتبر low - level لأنه يخاطب الـhardware مباشرة ... وهذا الكود ايضاً يسمى بالـ native machine code أي أنه كود مترجم على حسب نوع الـ hardware الذي تمت عليه عملية الـكومبايل.. طبعاً بعد إنشاء ملف الـ Object code والذي يكون عادة منتهي بالامتداد .obj تأتي عملية الربط linking فقد تكون قد استخدمت دوال جاهزة من مكتبة معينة مثل iostream فيقوم الكومبايل بعمل link لبرنامجك مع باقي الملفات الضرورية ليتم بالنهاية انتاج الملف التنفيذي executable code المنتهي بالامتداد المعروف .exe ) ..

لذلك لاحظ أخي عندما تسمع بأن الـ c++ تعطينا ملفات تنفيذية لا تعمل إلا على الويندوز وذلك بسبب ان البرنامج الذي كتبته قد ترجم على حسب العائلة التي ينتمي لها ال cpu الموجود بجهازك و Operating system فملفات الـ exe لا تعمل على unix ولا على linux )

فحل هذه المشكلة أتت فكرة الـ interpreters أي المفسرات والتي غالباً ما نسمع عنها عندما نأتي على ذكر الـجافا ..

فالـ compiler الخاص بالجافا يقوم بترجمة الكود الذي كتبته إلى instruction يشبه تعليمات لغة الأسمبلي أي انه لا تقوم بإنشاء كود low-level يخاطب الهاردوير مباشرة بل يقوم بإنشاء كود عام تقريباً مكتوب بلغة تشبه تعليمات الأسمبلي ويسمى هذا الكود بالـ byte code والذي يخزن بالامتداد .class ... لكن إلى الآن لم نقم بإنشاء كود تنفيذي أي اننا لا نستطيع تشغيل البرنامج وهنا تأتي فكرة الـ virtual machines وهي مثل جهاز افتراضي داخل جهازك الكمبيوتر بحيث تكون طبقة ( layer ) بين الكود الذي كتبته وبين الهاردوير الموجود على جهازك .. وتأتي الفكرة الآن بأن الكود الذي كتبته عند تشغيله ( بافتراض كتابة الأمر java myclass.class وهو السطر الذي يقوم باستدعاء ( invoke ) للـ Virtual Machine ) ، تقوم الـ virtual machine الآن بتفسير الكود الخاص بك سطراً سطراً وذلك يتم عن طريق قراءة التعليمة الأولى مثلاً ومن ثم ترجمتها إلى لغة الآلة التي يفهمها جهازك .. ) لاحظ الآن بأن الـكود الذي تكتبه بالجافا يمكن تشغيله على اي هاردوير واي operating system وذلك لأنك لا تقوم بنقل البرنامج بنسخته التنفيذية ابداً بل بشكله العام اي الـ (byte code ) والآن الـ virtual machine الموجودة على الويندوز او اللينوكس او اليونكس هي التي تقوم بترجمة البرنامج إلى لغة يفهمها ذلك الجهاز سطراً سطراً ) ...

اما بالنسبة لموضوع الأداء فلا شك بأن الـ object code هو كود سريع جداً وأسرع من الـ byte code وذلك لأن الـ Object code عبارة عن كود في حالته الدنيا القريبة جداً من ال hardware أي أنه كود low -level وذلك يعني بانه كود منتج خصيصاً للعائلة التي ينتمي لها الـ cpu الخاص بك .. بينما الـ byte code يكون كود عام تقريباً أي أنه ليس قريباً جداً من الـ cpu الذي تعمل عليه وغير ذلك فإن الـ virtual machine تقوم بقراءة الـ byte code سطراً سطراً ومن ثم يقوم بتوليد كود يفهمه ذلك الجهاز .. بخلاف الـ Object code الذي عند تحميله على الرام يعمل مباشرة لأنه يكون كود جاهز تماماً .

ولكن لاحظ بأن الـ virtual machine تقدم لنا مزايا رائعة وهي فكرة الـ cross platform التي تحدثنا عنها وهي تشغيل البرنامج على أي نظام تشغيل ( ما يقال عنه احياناً compile once, run anywhere)

أتمنى ان كنت قد اوصلت الفكرة وأتمنى تصحيح اخطائي ان وجدت من قبل اعضاء المنتدى الخبراء ..

مع تحياتي

تم تعديل هذه المشاركة بواسطة matrix coder في 11 أبريل 2007 في 18:44

#3

أتمنى نشوف ردود الشباب في المنتدى لأنه موضوع الـ compilers وال interpreters موضوع شيق حقيقة ...

مع تحياتي ...

#4

ما أعرفه عن الفرق بينهما أن ال compiler يحول الكود المكتوب بلغة البرمجة كله إلى ملف obj. بال machine language ثم يعمل linking يكوٍّن منه ملف exe. يمكن تشغيل الكود منه مباشرة بدون إعادة ترجمته.

أما ال interpreter فيترجم الكود سطر سطر ولا يعمل ملف exe. فلا يمكن تشغيل الكود بدون إعادة ترجمته .

وكل منهما له اللغات المشهورة مثل ال C\C++ لل compiler وال assbemly لل interpreter .

تم تعديل هذه المشاركة بواسطة eng47 في 13 أبريل 2007 في 13:31

هذا الموضوع مغلق.

مواضيع مشابهة