آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
مشکل عدم دسترسی خریداران پیشین به برخی آموزش ها برطرف شد
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

تفاوت مترجم (compiler) با مفسر (interpreter) چیست؟

AAA  10 سال پیش  9 سال پیش
+3 0

با عرض سلام خدمت تمامی دوستان.

ممکنه این سوال خیلی تکراری باشه و یا بگین برای بدست آوردن جواب توی سایت stackoverflow یا barnamehnevis و یا به هر حال توی اینترنت یه سرچی بزن ,  اما خیلی به دنبال جواب بودم که متاسفانه به نتیجه نرسیدم.

از یه استاد دانشگاه پرسیدم , گفت تمامی  زبان های سطح بالا , کامپایل (ترجمه) میشن و تمامی زبان های سطح میانی , تفسیر میشن. خب اگه اینطوره یه زبانی مثل++ c که سطح میانیه چرا کامپایلر داره (borland c++ , dev c++ , and etc) و چرا میگن کدهاش کامپایل میشه و یا یه زبانی مثل جاوا اسکریپت که سطح بالاست چرا میگن تفسیر میشه! چرا میگن زبان اسمبلی تفسیر میشه ! :| چرا میگن جاوا کامپایل میشه! و خیلی از این سوالات دیگه.

از یه وب مستر پرسیدم گفت فقط زبان اسمبلی تفسیر میشه و تمامی زبان های دیگه کامپایل میشن!

یکی دیگه گفت زبان هایی که کامپایل میشن سرعت پایینی دارن و زبانهایی که تفسیر میشن سرعت بالایی دارند :|

حالا شما دوستان بگید که واقعا  تفاوت مترجم (compiler) با مفسر (interpreter) چیه؟

از کجا بفهمیم که چه زبانی تفسیر میشه و چه زبانی کامپایل میشه و کلا تفاوت این دو در چیه؟!

من خیلی ساله که با برنامه نویسی سر و کله میزنم ولی متاسفانه هنوز جواب این سوال رو بلد نیستم و دوستان زیادی این سوال رو از بنده پرسیدن که واقعا جواب این سوال رو نمیدم چون جواب قطعی رو بلد نیستم.

ممنون میشم که وقت بذارید و به سوال این بنده ی حقیر پاسخ دهید. لطفا برای پاسخ یه پست جدید ایجاد کنید و به اصطلاح کامنت نذارید و ترجیحا مفصل بنویسید ;) خیلی جوابش برام مهمه !!! واقعا مهمه :|

پیشاپیش از پاسخ شما سپاس گذارم .

با احترام

 

 

 برای این سوال 2 پاسخ وجود دارد.
پاسخ به سوال 
Mr Mehdi  10 سال پیش
+5 0

بزرگترین تفاوت اینها این هست که مفسرها کدها رو در واحد زمان میخونن و بعد به از تبدیل کردن به کدهای ماشین اونها رو اجرا می کنه اما کامپایلرها همه کد رو میخونن و بعد همه رو یکجا کامپایل می کنن

خب مشکل اصلی مفسرها اینه که هربار که برنامه اجرا میشه کدها تبدیل میشن که خیلی جالب نیست و مسلما وقت رو بیشتر می گیره در مقابل مشکل کامپایلر اینه که دیگه برای تغییر نرم افزار باید حتما به کدهای سورس دسترسی داشته باشیم

من فکر نمیکنم سطح زبان ربطی به کامپایلر یا مفسر داشته باشه اما اصولا زبانهای سطح بالا تفسیر میشن و همینطور زبان اسمبلی هم نه کامپایل میشه نه تفسیر و روش خودش رو داره (احتمالا به خاطر سطح پایینش) و اسمبل میشه

همینطور روش این که بفهمی زبان تفسیر میشه یا کامپایل ساده ترین روش و بدون اینترنت ترین ( :| ) روش اینه که ببینی فایل سورس همون فایلی هست که اجرا میشه یا نه. اگه یکی بودند زبان تفسیر میشه اگر هم نه زبان کامپایل میشه

0 0
ممنون از توضیحات خوبتون. فقط یه چیزی , توی توضیحاتون گفتید زبان های تفسیر شدنی سرعت کند تری دارند , پس با توجه به گفته ی شما زبان های سطح بالا باید کامپایل شوند نه تفسیر. درسته؟ راستی اسمبلی هم میگن تفسیر شدنیه. مطالب خوبی رو نوشتید ولی بازم میترسم کسی ازم سوال بپرسه جواب اشتباه بدم و ضایع بشم :( :| فقط موندم دقیقا روی چه حساب و کتابی به یه زبان هایی مثل c , c++ , java , c# میگن ترجمه میشن و به زبانهایی مثل اسمبلی , php , javascript , html , python میگن تفسیر شدنی :( (10 سال پیش)
0 0
اولا اسمبلی اسمبل میشه نه تفسیر این دو بار. قبلش هم گفتم فکر نکنم که سطح زبان ربطی به کامپایل شدن یا تفسیر شدن داشته باشه. اگر هم یکبار دیگه متن رو بخونید متوجه فرقشون و اینکه چرا به اونها میگن تفسیر شدن و به اون سری دیگه میگن کامپایل ‌شدن (10 سال پیش)
0 0
درواقع وقتی مثل فایل های c++کامپیل میشن یه فایل اجرایی ایجاد میکنن ولی وقتی به قول شما تفسیر میشن فایل اجرایی ندارن و شما نمیتونین اجراشون گنید مثل فایل های php ک برای اجرا کردنشون نیازه اپاچی فعال باشه ... خیلی ساده و روان! (9 سال پیش)
پاسخ به سوال 
Majnoon  9 سال پیش
+2 0

با نام خدا

و با سلام

سعی می کنم تا در مختصرترین شکل ممکن شرح کوچکی بدهم و اگر اساتید محترم مطالبی رو که می گم اصلاح کنن خیلی خوشحال می شوم.

قبل از آن این نکته را  بگویم که اسمبلی به دو مفهوم مختلف اطلاق می شود ، یکی مفهوم زبان برنامه نویسی اسمبلی  که به عنوان یک زبان سطح پایین است - در حقیقت نزدیکترین زبان به زبان ماشین - و اگر بگویید کامپایلر است اشتباه نگفته اید که در ادامه می گویم چرا ، و دوم کد اسمبلی است که در زبان های .Net استفاده می شود
و حکم  IL را دارد (  Intermediate  Language )   و در حقیقت در میان راه کامپایلر بودن و اینترپرتر بودن دست و پا میزند و هر دو هستحالا دوستانی که می گویند اسمبلی کامپایلر یا اینترپرتر است باید مشخص نمایند درباره کدام یک از اسمبلی ها دارند صحبت می کنند اولی یا دومی ؟
اولی را در دانشگاه بچه های رشته کامپیوتر  به نام " درس زبان ماشین " می خوانند
 و دومی که در دروس سی شارپ و ویژوال بیسیک دات نت خوانده می شود.

اما بعد کامپایلر(مفسر) و اینترپرتر(مترجم) چه فرق هایی با هم دارند  ؟

همینطور که می دانید هر دستگاه کامپیوتری ( کامپیوترهای رومیزی ، نوت بوک ها، گوشی های هوشمند، تبلت ها و .....)  از سخت افزار خاصی ساخته شده است که دارای قسمت های مختلفی از جمله پردازنده- Processor –   است.
حال  اگر بخواهید برای این پردازنده برنامه ای بنویسید که این پردازنده کاری را انجام دهد باید دستورات زبان ماشین خاص آن پردازنده را یکجا نوشته در یک فایل ذخیره کنید و برای اجرا آن فایل را یکباره به پردازنده بدهید تا اجرا کند.
چون نوشتن به زبان ماشین بسیار نیاز به حوصله و وقت دارد و اشکال زدایی ( دیباگ ) آن نیز کار پر مشقت و وقت گیری است معمولا از سایر زبان ها استفاده می کنند و آن زبان ها را با
"برنامه های خاصی" به زبان ماشین تبدیل می کنند.
حال اگر این برنامه های خاص این تبدیل را کامل انجام دهند و در یک فایل به زبان ماشین ذخیره کنند به آن
"برنامه های خاص" کامپایلر می گویند( کامپایلر آن زبان مثلا کامپایلر زبان سی یا C++   یا بیسیک یا فرترن یا کوبول یا .... ( ده ها زبان برنامه نویسی دیگر) می گویند.
اما اگر آن برنامه خاص تبدیل دستورات به زبان ماشین را  به جای یکباره و کامل به صورت  دستور به دستور انجام دهد و همان لحظه دستور تبدیل شده ( فقط و فقط همان دستور را ) برای اجرا به پردازند ه تحویل دهد و پس از اجرا دوباره دستور بعد را به زبان ماشین تبدیل کند و به پردازنده تحویل دهد و ....
این ماجرا تا به انتهای دستورات به صورت خط به خط تکرار شود و دستورات زبان ماشین توسط پردازند ه فقط اجرا شوند و در فایلی ذخیره نشوند به آن برنامه خاص اینترپرتر یا مترجم می گویند.

در گذشته های دور نسخه های مختلف بیسیک جزو معروفترین زبان های اینترپرتری دنیا بودند نسخه هایی نظیر  GWbasic  و Basica و QBasic ... و البته نسخه های کامپایلری نیزداشت نظیر  Quick Basic و  Turbo Basic ...
اما زبان هایی نظیر
C  و  C++ و پاسکال همیشه کامپایلر داشته اند و هیچ وقت دارای مفسر نبوده اند. ( تا جایی که بنده اطلاع دارم. )

مزایای کامپایلر ترجمه یکباره کد و ذخیره کد ترجمه شده در یک فایل و بی نیازی از کد نوشته شده اولیه ( فایل سورس  Source )  میباشد که باعث بالا رفتن سرعت اجرای برنامه می‌باشد.

اما مزیت اینترپرتر در تبدیل خط به خط از زبان برنامه نویسی مورد نظر به زبان ماشین و  اجرای فقط همان خط توسط پردازنده میباشد. و به این ترتیب با ترجمه و اجرای خط به خط برنامه تا پایان میتواند پیش برود.

این روش مزایای مختلفی دارد از جمله درک بهتر برنامه نویسی توسط برنامه نویس های تازه کار میباشد و یکی از مزایا خوب دیگر آن این است که برنامه نیازی ندارد کاملا درست باشد تا اجرا شود بلکه از ابتدا تا اولین دستورالعمل اشکال دار اجرا می شود بنابراین خطایابی آن نیز راحت میباشد.

شاید بزرگترین مزیت اینترپرتر این است که برنامه نوشته شده اصلی وابستیگی کمتری به نوع سخت افزار دارد. لذا برنامه ای که به زبان اینترپرتری نوشته شود همانطور که می تواند روی یک کامپیوتر ب پردازنده اینتل اجرا شود می تواند بر روی یک تبلت با پردازنده آرم نیز اجرا شود یا روی یک موبایل یا یک اسباب بازی مدل.

از این خاصیت شرکت سان میکرو سیستم استفاده کرد و زبان جاوا را ابداع کرد. زبان جاوا زبانی است که هم در ابتدا کامپایل می کند و تا نیمه راه کد کامپایل شده را آماده سازی می کند ولی برای آخرین مرحله اجرا از اینترپرتر استفاده می کند که اصطلاحاً به آن ماشین مجازی جاوا یا  Java Virtual Machine  می گویند. این ایده عالی باعث شد تا برنامه نویسان بتوانند برنامه هاییی را بنویسیند و در وب و اینترنت توزیع کنند بدون اینکه نگران باشند که کاربری که از برنامه آنها استفاده میکند از چه نوع سخت افزاری استفاده می کند. انوای کامپیوترهای شخصی و نوت بوک و لپتاپ انواع کامپیوترهای بزرگ و کوچک و متوسط و میکرو و انواع ابزارها نظیر ساعت و عینک و تی وی و ..... فقط اگر ماشین مجازی جاوا بر رویشان نصب شده باشد می توانند همان برنامه نوشته شده  را استفاده کنند.  این یکی از مهمترین دلایل محبوبیت زبان جاوا است. همین ایده پس از پیاده سازی در جاوا توسط مایکروسافت کپی برداری شد و به صورت .Net Framework و زبان های برنامه نویسی  .Net   به بازار عرضه شد.

 

لذا جاوا و زبان هایی نظیر سی شارپ و ویژوال بیسیک دات نت را هم میتوان کامپایلر دانست و  هم مفسر(اینترپرتر) .

ولی زبان هایی چون ویژوال بیسیک از ورژن 6 به قبل و سی و سی پلاس پلاس زبان هایی کامپایلری هستند.

 

یا حق

0 0
منبع رو هم درج کنید. و برای زیبایی مطالب بعد از کپی کردن متن از یه جای دیگه clear formatting رو بزنید همون دکمه اولی از سمت راست تو ادیتور. (9 سال پیش)
+1 0
مطلب بالا نوشته خودم است. از جایی کپی نشده. ( البته در word تایپش کردم و بعد به داخل ویرایشگر وب کپی کردم! اگر این حسابه! ) ممنون بخاطر راهنمایی درباره Clear Formatting (9 سال پیش)
+1 0
خب پس چرا Clear Formatting نکردید؟ (9 سال پیش)
+1 0
خوب چون بلد نبودم ! ولی جناب fast-typer یادم دادن ! بازم تشکر از ایشون. (9 سال پیش)
+1 0
nice (9 سال پیش)
+1 0
نظر من : مترجم : یعنی اینکه وقتی یکبار تمامی کدها رو ترجمه و اجرا کرد برای بار دوم دیگه کار های قبل از اجرا رو انجام نمیده مانند زبان c و ++c اما مفسر : یعنی اینکه هر بار برنامه رو اجرا میکنید دوباره از همون جا شروع به تفسیر سپس کامپایل میشه مانند جاوا که کمی سرعت رو پایین میاره (9 سال پیش)
+1 0
منظور از اجرا در مفسر یعنی تفسیر (9 سال پیش)
+1 0
تفاوتی ک باعث میشه قشنگ درک کرد تفاوت این دورو درواقع وقتی مثل فایل های c++کامپیل میشن یه فایل اجرایی ایجاد میکنن ولی وقتی به قول شما تفسیر میشن فایل اجرایی ندارن و شما نمیتونین اجراشون گنید مثل فایل های php ک برای اجرا کردنشون نیازه اپاچی فعال باشه ... (9 سال پیش)
0 0
اینترپریتور کدها رو به ماشین ترجمه نمیکنه چون اصلا روی ماشین اجرا نمیشه روی سرور اینترپرت میشود مانند زبان php اما کامپایلر و مفسر که در بالا توضیح داده شد (9 سال پیش)

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .