تفاوت کامپایلر و مفسر در برنامه نویسی چیست؟
کدهای برنامه نویسی از طریق مفسر (Interpreter) یا کامپایلر (Compiler) برای سیستم های کامپیوتری ترجمه می شوند. در حقیقت برنامه نویس با کمک مفسر یا کامپایلر زبان برنامه نویسی سطح بالا را به یک زبان ساده و قابل فهم تبدیل می کند. امروز در داناپ قصد داریم تفاوت های میان سیستم مفسر و کامپایلر را مورد بررسی قرار دهیم پس با ما همراه باشید.
کامپایلر چیست؟
کامپایلر (Compiler) یک برنامه کامپیوتری است که کدهای نوشته شده به زبان های برنامه نویسی سطح بالا را به کدهای ماشینی (Machine Code) تبدیل می کند. به عبارت دیگر این برنامه کامپیوتری کدهایی که برای انسان قابل خواندن هستند را به زبان باینری صفر و یک ترجمه می کند؛ به گونه ای که پردازنده سیستم کامپیوتری نیز آنها را درک کند و در آخر سیستم کامپیوتری کدهای ماشینی را برای انجام عملیاتی خاص پردازش می کند.
کامپایلر باید از سینتکس همان زبانی که بر اساس آن نوشته شده است تبعیت کند؛ با این حال کامپایلر فقط یک برنامه است و قادر نیست که خطاهای موجود در آن برنامه را برطرف سازد بنابراین در صورت بروز اشتباه باید سینتکس نرم افزار خود را تغییر دهید و گرنه برنامه به درستی کامپایل نخواهد شد.
مفسر چیست؟
مفسر یک برنامه رایانه ای به شمار می رود که هر خط (Statement) از برنامه سطح بالا را به کد ماشین تبدیل می کند که شامل سورس کدها، کدهای پیش از کامپایل (Pre-Compiled) و اسکریپت ها می شود. عملکرد کامپایلر و مفسر شبیه به هم است؛ به گونه ای که هر دو آنها در واقع زبان های برنامه نویسی سطح بالا را به کدهای ماشین تبدیل می کنند. کامپایلر کد را قبل از اجرای برنامه به کد ماشین (ساخت فایل exe) تبدیل می کند اما مفسر کدها را همزمان با اجرای برنامه به کد ماشین تبدیل خواهد کرد.
تفاوت های اصلی بین کامپایلر و مفسر
1- مراحل برنامه نویسی :
کامپایلر:
- کامپایلر صحت و سقم تمام Statement های زبان برنامه نویسی را تجزیه و تحلیل می کند و در صورت شناسایی اشتباه، ارور خواهد داد.
- اگر مشکلی شناسایی نشود، کامپایلر سورس کدها را به کد ماشین تبدیل خواهد کرد.
- کامپایلر کد فایل های مختلف را به به یک برنامه قابل اجرا لینک خواهد کرد که به عنوان فایل های exe شناخته می شوند.
مفسر:
- هیچ پیوندی از فایل ها یا تولید کدهای ماشین انجام نمی شود.
- سورس Statementها در طی اجرای برنامه به صورت خط به خط اجرا می شوند.
2- مزایا:
کامپایلر:
- کدهای برنامه از قبل به کدهای ماشین ترجمه شده اند، بنابراین زمان اجرای کد کوتاه خواهد بود.
مفسر:
- استفاده از مفسرها به خصوص برای برنامه نویسان مبتدی آسان تر است.
3- معایب:
کامپایلر:
- شما بدون مراجعه به سورس کدها نمی توانید برنامه کامپایلری را تغییر دهید.
مفسر:
- برنامه های تفسیری را می توان در سیستم های کامپیوتری که دارای مفسرهای متناظر هستند، اجرا کرد.
4- کدهای ماشین:
کامپایلر:
- زبان ماشینی با عنوان Machine Code در دیسک ذخیره خواهد شد.
مفسر:
- کدهای ماشینی به هیچ وجه ذخیره نخواهند شد.
5- زمان اجرا (Running Time):
کامپایلر:
- کدهای کامپایل شده عملکرد سریع تری دارند.
مفسر:
- کدهای تفسیری سرعت پایین تری دارند.
6- مدل:
کامپایلر:
- کامپایلر مبتنی بر مدل Translationlinking-Loding فعالیت می کند.
مفسر:
- مفسر بر اساس متد تفسیری فعالیت می کند.
7- برنامه ساز (Program Generator):
کامپایلر:
- کامپایلر برنامه کامپیوتری را به صورت فایل exe تولید می کند؛ این برنامه را می توان به صورت مستقل و بدون نیاز به برنامه اصلی اجرا کرد.
مفسر:
- مفسر برنامه خروجی نمی سازد، بلکه همواره برنامه اصلی را در زمان اجرا ارزیابی خواهد کرد.
8- اجرا:
کامپایلر:
- اجرای برنامه از فرآیند کامپایل جداست و پس از کامپایل شدن تمام اجزای یک برنامه انجام می پذیرد.
مفسر:
- اجرای برنامه بخشی از فرآیند تفسیر محسوب می شود که به صورت خط به خط انجام می پذیرد.
9- فضای ذخیره سازی :
کامپایلر:
- برنامه مربوطه جدا از کامپایلر اجرا می شود بنابراین نیازی به ذخیره سازی کامپایلر در حافظه نخواهد بود.
مفسر:
- مفسر در طول فرآیند تفسیر کدهای برنامه نویسی در حافظه ذخیره می شود.
10- زمینه استفاده:
کامپایلر:
- زبان های کامپایلری محدود به ماشین خاص هستند و قابلیت انتقال ندارند. زبان های برنامه نویسی محبوب C و C++ از مدل کامپایل استفاده می کنند.
مفسر:
- زبان های مفسری در محیط وب که سرعت بالای لودینگ مهم است مورد استفاده قرار می گیرند. در واقع در زبان های کامپایلری، تجزیه و تحلیل به صورت جامع انجام می شود بنابراین زمان کامپایل (حتی کدهای کوچک) طولانی تر می شود.
11- بهینه سازی کدها:
کامپایلر:
- کامپایلر تمام کدها را به عنوان پیش فرض در نظر می گیرد، بنابراین می توانند عملیات بهینه سازی را در جهت افزایش سرعت کدها انجام دهند.
مفسر:
- مفسرها کدهای برنامه نویسی را به صورت خطی در نظر می گیرند بنابراین در بهینه سازی آن ها عملکرد ضعیفی دارند.
12- تایپینگ داینامیک (Dynamic Typing):
کامپایلر:
- از آنجایی که کامپایلر نمی تواند وقایع پیش رو در زمان تعمیر نگهداری (Turn Time) را پیش بینی کند، بنابراین تایپینگ داینامیک در آن دشوار خواهد بود.
مفسر:
- زبان های مفسری از تایپینگ داینامیک پشتیبانی می کنند.
13- کاربرد:
کامپایلر:
- زبان های کامپایلری بهترین گزینه برای محیط تولید به شمار می روند.
مفسر:
- زبان های مفسری برای برنامه و محیط های توسعه نرم افزار گزینه مناسبی محسوب می شود.
14- اجرای ارور:
کامپایلر:
- کامپایلرها تمام خطاها و هشدارها را در زمان کامپایل مشخص می کند، بنابراین اجرای برنامه بدون رفع ارورها امکان پذیر نخواهد بود.
مفسر:
- مفسر یک خط از کدها را خوانده و ارورهای موجود را شناسایی می کند؛ بنابراین شما برای تفسیر خط بعدی باید ارورها را بر طرف کنید.
15- ورودی (Input):
کامپایلر:
- کل برنامه باید به عنوان ورودی کامپایلر در نظر گرفته شود.
مفسر:
- یک خط کد از برنامه را نیز می توان به عنوان ورودی مفسر در نظر گرفت.
16- خروجی (Output):
کامپایلر:
- کامپایلرها کدهای ماشینی سطح متوسط تولید می کنند.
مفسر:
- مفسر هیچ کد ماشینی سطح متوسطی تولید می کند.
17- ارور:
کامپایلر:
- کامپایلر تمام ارورها را در زمان Compilation نمایش می دهد.
مفسر:
- تمام ارورها به صورت خط به خط نشان داده می شود.
18- زبان های برنامه نویسی:
کامپایلر:
- زبان های برنامه نویسی نظیر C، C++ و سی شارپ، Scala و جاوا از کامپایلر استفاده می کنند.
مفسر:
- زبان های برنامه نویسی مانند PHP، Perl و Ruby از مفسر استفاده می کنند.
نقش کامپایلر
- کامپایلر کدهای اجرایی را از روی سورس کدها می سازد.
- کامپایلر نرم افزاری که به زبان سطح بالاتر نوشته شده است را به دستورالعمل هایی تبدیل می کند که کامپیوتر می تواند آن را درک کند. به عبارت دیگر کامپایلر متنی که توسط برنامه نویس نوشته شده است را به فرمتی تبدیل می کند که توسط CPU کامپیوتر قابل درک باشد.
- فرآیند کامپایل کردن نسبتاً پیچیده است بنابراین تجزیه و تحلیل و پردازش برنامه زمان بر خواهد بود.
- نتیجه اجرایی عملیات کامپایل، نوعی کدهای باینری (01) مخصوص ماشین خواهد بود.
نقش مفسر
- مفسر در زمان Run-Time، کدها را خط به خط ترجمه می کند.
- برنامه هایی که به زبان سطح بالا نوشته شده اند به صورت کامل به زبان سطح ماشین ترجمه خواهند شد.
- برنامه نویس می تواند با استفاده از مفسر برنامه در حال اجرا را ارزیابی یا اصلاح کند.
- مفسر زمان نسبتاً کمتری برای تجزیه و تحلیل و پردازش برنامه صرف می کند.
- اجرای برنامه در مقایسه با کامپایلر از سرعت پایین تری برخوردار است.
زبان های سطح بالا چیست؟
زبان های سطح بالا نظیر C، C++، جاوا و غیره شباهت زیادی با زبان انگلیسی دارند و فرآیند برنامه نویسی را آسان می کنند. البته زبان های سطح بالا قبل از اجرا باید توسط کامپایلر یا مفسر به زبان ماشین ترجمه شوند؛ زبان های سطح بالا با به عنوان سورس کد نیز شناخته می شوند.
کد ماشین چیست؟
کدهای ماشینی شبیه به سخت افزارها هستند و هر سیستم کامپیوتری زبان ماشینی مختص به خود را دارد. برنامه های زبان ماشینی از الگوهای باینری (نظیر 110110) تشکیل شده اند که هر کدام نشان دهنده عملیاتی است که سیستم کامپیوتری باید آن را اجرا کند. در حقیقت برنامه های زبان ماشینی قابل اجرا هستند بنابراین امکان Run کردن آن ها به صورت مستقیم وجود دارد.
کد شی (Object Code) چیست؟
در فرآیند کامپایل کردن سورس کدها، کدهای ماشینی که برای پردازشگرهای مختلف نظیر اینتل، AMD و ARM تولید می شوند با یکدیگر متفاوت خواهند بود. برای این که کدها قابلیت انتقال داشته باشند سورس کدها باید ابتدا به Object Code تبدیل شوند.
آنها نیز (همانند کدهای ماشین) کدهای سطح متوسطی هستند که توسط پردازشگرهای کامپیوتری درک نخواهند شد. البته این کدها در زمان اجرای برنامه به کدهای ماشینی پلتفرم مورد نظر تبدیل خواهند شد.
دیدگاهتان را بنویسید
برای نوشتن دیدگاه باید وارد بشوید.