![زبانهای مفسری و کامپایلری چیست؟[تعریف ، معرفی هر زبان ، مزایا و معایب]](https://up.7learn.com/z/s/wp/2023/03/1-2.jpg)

زبانهای مفسری
همانطور که میدانید، کامپیوتر درک درستی از زبانهای برنامه نویسی سطح بالا ندارد؛ بنابراین به واسطی نیاز داریم که برنامه را به کد ماشین تبدیل کند. این واسط، همان زبان برنامه نویسی مفسری (interpreter) و زبان برنامه نویسی کامپایلری (compiler) است.زبان مفسری چیست؟
زبانهای مفسری یا Interpreted Languages، زبانهایی هستند که کدهای برنامه نویسی آنها، به صورت خط به خط توسط یک مفسر (Interpreter) اجرا میشود. به این صورت که مفسر، کد برنامه نویسی را دریافت کرده و به ترتیب خطوط آن را تفسیر کرده تا به زبان قابل درک برای کامپیوتر تبدیل کند. به همین دلیل، زبانهای مفسری نیازی به کامپایل کردن کد برنامه نویسی ندارند و در عوض، اجرای کدها به صورتی که در فایل متنی آنها ذخیره شده، صورت میگیرد. به عنوان مثال، Python و Ruby نمونههایی از زبانهای مفسری هستند. این زبانها، برای اجرای کدهای برنامهنویسی خود نیازی به کامپایل کردن آنها ندارند و توسط مفسرهای مخصوص به هر زبان، به صورت خط به خط تفسیر میشوند. استفاده از زبانهای مفسری، مزایای خاص خود را دارد. به دلیل عدم نیاز به کامپایل کردن کدها، زبانهای مفسری قابلیت توسعه و تست برنامه را افزایش میدهند. همچنین، به دلیل اینکه کدها بصورت متنی ذخیره میشوند، این زبانها قابلیت خوانایی و نگهداری بالایی دارند. علاوه بر این، با اجرای خط به خط برنامه، میتوان در هر لحظه از اجرای برنامه، وضعیت آن را بررسی کرد و از این ویژگی برای اشکالزدایی و تست برنامه استفاده کرد.
نحوهی کارکرد زبانهای مفسری
عملکرد زبانهای مفسری رو مرحله را شامل میشود. در بخش اول، کل برنامه از قبل به زبان مفسر تحویل داده شده و در بخش دوم، برنامه توسط کاربر تایپ و سپس توسط مفسر اجرا میشود. در این نوع زبانها، برنامهها به صورت خط به خط خوانده خواهند شد و هر خط به تنهایی توسط مفسر ترجمه و اجرا میشود. در هر خط، مفسر ابتدا سینتکس (Syntax) را بررسی میکند تا مطمئن شود که خطایی در برنامه وجود ندارد و سپس خط را به صورت کامل اجرا میکند. در صورتی که خطایی در خط مورد نؤ وجود داشته باشد، مفسر به صورت خودکار خطا را نمایش میدهد. از آنجایی که در این نوع زبانها هیچ فرایند کامپایلی صورت نمیگیرد، مفسر برای اجرای برنامه باید در هر بار اجرا به صورت خط به خط آن را تفسیر کند. این ویژگی باعث میشود که اجرای برنامه در زبانهای مفسری به طور کلی کندتر و آهستهتر از زبانهای کامپایلری باشد. همچنین، به دلیل نیاز به مفسر برای اجرای برنامه، مصرف حافظه و پردازشهای اضافی مورد نیاز است.
مزایا و معایب زبانهای مفسری
همانطور که پیشتر اشاره شد، زبانهای مفسری برای اجرای کدهای خود از یک مفسر کمک میگیرند. برای تشخیص خطا در کد، مفسر ابتدا بررسیهای لازم را انجام داده و پس از آن، کد را اجرا میکند. در ادامه به مزایا و معایب استفاده از زبانهای مفسری پرداخته میشود:مزایا زبانهای مفسری
- سهولت در نوشتن کد: در زبانهای مفسری برای نوشتن کد نیاز به دانش کامپیوتری عمیقی ندارید؛ برای اجرای کد، فقط کافی است که یک مفسر مناسب برای آن زبان نصب شده باشد.
- اجرای سریع کد: در زبانهای مفسری، کد بلافاصله پس از تایپ اجرا خواهد شد. به همین دلیل، زمان اجرای کد در زبانهای مفسری از زبانهای کامپایلری کمتر است.
- امکانات خوب دیباگینگ: در زبانهای مفسری، به دلیل اجرای دستورات در لحظه و بلادرنگ (real-time)، میتوان از امکانات دیباگینگ به صورت کارآمدتری استفاده کرد.
معایب زبانهای مفسری
- کندی در اجرای کد: زبانهای مفسری در زمان اجرا به دلیل ترجمه خط به خط و اجرای کد مربوط به هر خط، با کندی مواجه میشوند. این مشکل بهویژه در برنامههایی با حجم بالا و دستورات پیچیده برجستهتر بوده که اجرای آنها باعث کاهش سرعت عملکرد میشود.
- کد منبع قابل دیدن: در زبانهای مفسری، کد منبع در هنگام اجرا قابل مشاهده است و میتوان آن را به سادگی مورد حمله قرار داد.
- نیاز به نصب مفسر: برای اجرای برنامههای نوشته شده با زبانهای مفسری، نیاز است که مفسر آن زبان بر روی سیستم کاربر نصب شده باشد. این مسئله به عنوان یک نقطه ضعف در مورد استفاده از زبانهای مفسری در نظر گرفته میشود.
- امکان ایجاد خطا: به دلیل اجرای کد در لحظه و به دلیل اینکه کدهای نوشته شده با زبانهای مفسری به صورت خط به خط ترجمه و اجرا میشوند، در صورتی که کد نوشته شده به درستی کار نکند، احتمال ایجاد خطا افزایش مییابد.
مثال هایی از زبانهای مفسری
تعدادی از زبانهای مفسری محبوب و پراستفاده را در زیر بررسی میکنیم:- پایتون (Python)
- جاوااسکریپت (JavaScript)
- روبی (Ruby)
- پرل (Perl)
- پی اچ پی (PHP)

زبانهای کامپایلری
روش اجرا کدها، مهمترین وجه تمایز بین زبانهای مفسری و زبانهای کامپایلری است. برای درک این تفاوت، تعریف زبان کامپایلری و ابعاد مختلف آن میپردازیم:زبان کامپایلری چیست؟
زبان کامپایلری یا Compiled Language، زبانی است که کد منبع آن توسط یک کامپایلر به کد اجرایی ترجمه میشود. در زبان کامپایلری، کامپایلر با استفاده از الگوریتمهای خاص خود، کد منبع را به صورت کامل به کد اجرایی تبدیل میکند. در ادامه این کد اجرایی میتواند در سیستم عامل وارد شده و اجرا شود. در زبان کامپایلری، قبل از اجرای برنامه، کامپایلر کد منبع را به کد ماشینی (machine code) ترجمه خواهد کرد. کد ماشینی برای پردازندهها قابل فهم بوده و میتواند به صورت مستقیم اجرا شود. این کد اجرایی نیاز به نصب رانتایم (runtime) ندارد و عملکرد بهینهتری نسبت به زبانهای مفسری دارد. با این حال، تغییرات در کد منبع نیازمند کامپایل مجدد و تولید مجدد کد اجرایی هستند.
نحوهی کارکرد زبانهای کامپایلری
نحوه کارکرد زبانهای کامپایلری به این صورت است که کد منبع نوشته شده توسط برنامهنویس، به عنوان ورودی به کامپایلر داده میشود. در ادامه کامپایلر کد منبع را دریافت و بررسی کرده تا به زبان سطح پایین (Low-level programming language) و معمولاً به زبان ماشین، تبدیل کند. در این فرآیند، کامپایلر قوانین برنامه نویسی و خطاهای مرتبط با آن را زیر نظر میگیرد و در صورتی که خطایی وجود دارد، پیام خطای مناسب را نمایش میدهد. پس از تبدیل کد به زبان سطح پایین، این کد قابل اجرا توسط سیستم میشود.
مزایا و معایب زبانهای کامپایلری
زبانهای کامپایلری، علاوه بر دارا بودن مزایایی نظیر سرعت بالا و بهینهسازی کدها، با برخی نفاط ضعف همراه هستند که باید در نظر گرفته شوند. در این بخش، به بررسی مزایا و معایب زبانهای کامپایلری پرداخته خواهد شد:مزایا زبانهای کامپایلری
- سرعت اجرای برنامه: زبانهای کامپایلری به دلیل تبدیل کل برنامه به کد ماشینی در فرآیند کامپایل، از سرعت اجرای برنامه بسیار بالاتری نسبت به زبانهای مفسری برخوردار هستند.
- بهینهسازی برنامه: در زبانهای کامپایلری، کامپایلر به صورت خودکار قابلیت بهینهسازی کد را داراست، بنابراین کدی که توسط کامپایلر تولید میشود، بهینهتر بوده و سرعت اجرای برنامه را بیشتر میکند.
- کشف خطاهای زمان کامپایل: در زبانهای کامپایلری، خطاهای برنامه در فرآیند کامپایل شناسایی و به کاربر اعلام میشود. به عبارت دیگر، با استفاده از زبان کامپایلری میتوان خطاهای برنامه را در مرحله توسعه شناسایی کرد و آنها را برطرف نمود.
- پایداری بالا: به دلیل ذخیره کد کامپایل شده به صورت فایل اجرایی، برنامهها با پایداری بالاتری اجرا میشوند. این به این معناست که تغییرات در نرم افزار باعث بروز خطاهای بیشتر نمیشود.
معایب زبانهای کامپایلری
- سختی در اجرای برنامه در پلتفرمهای مختلف: برای اجرای برنامههای کامپایل شده بر روی سیستمهای مختلف، باید برنامه را برای هر سیستم، مجزا کامپایل کرد. این موضوع باعث میشود که اجرای برنامه بر روی پلتفرمهای مختلف سخت باشد.
- زمان کامپایل بیشتر: زبانهای کامپایلری بر خلاف زبانهای مفسری، زمان بیشتری برای کامپایل برنامهها نیاز دارند. این موضوع ممکن است باعث تاخیر در اجرای برنامههای بزرگ و پیچیده شود.
- عدم قابلیت اجرای برنامه در حین کامپایل: در زبانهای کامپایلری، برنامه باید در ابتدا کامپایل شده و سپس اجرا شود. این موضوع باعث عدم امکان اجرای برنامه در حین کامپایل میشود که در برخی مواقع ایجاد مشکل میکند.
- کد نویسی برای برنامهنویسان: کد نویسی برای برنامهنویسان برنامههای کامپایل شده، ممکن است سختتر و پیچیدهتر باشد. همچنین این موضوع باعث افزایش هزینهها و زمان توسعه برنامه خواهد شد.
- برخی مشکلات امنیتی: به دلیل آنکه برنامههای کامپایل شده به صورت کد باینری و اجرایی در دسترس هستند، ممکن است برخی مشکلات امنیتی وجود داشته باشد که در برنامههای مفسری به راحتی قابل حل هستند.
مثال هایی از زبانهای کامپایلری
تعدادی از زبانهای کامپایلری محبوب و پراستفاده را در زیر بررسی میکنیم:- زبان برنامه نویسی سی (C)
- جاوا (Java)
- سی پلاس پلاس ( ++ C)
- پایتون (Python)

مقایسه زبانهای مفسری و کامپایلری
شباهتها و تفاوتهای زبانهای مفسری و کامپایلری بسیار مهم و قابل توجه هستند. این دو دسته زبان برخی ویژگیهای مشابهی دارند، اما در عین حال در بسیاری از مشخصات با یکدیگر تفاوت دارند. در این بخش، به مقایسه و توضیح شباهتها و تفاوتهای زبانهای مفسری و زبانهای کامپایلری میپردازیم:شباهتها
- هر دو نوع زبان به کاربر اجازه میدهند تا برنامهی خود را در یک زبان خاص بنویسند و آن را به زبانی قابل فهم برای کامپیوتر ترجمه کنند.
- هر دو نوع زبان از ساختارهای کنترلی مشابهی برخوردار هستند که شامل حلقهها، شرطیها و توابع است.
- در هر دو نوع زبان، برنامههای نوشته شده میتوانند بر روی سیستمعاملهای مختلف اجرا شوند.
- هر دو نوع زبان برای تولید برنامههایی با کارایی بالا و سرعت اجرای بالا طراحی شدهاند.
- هر دو نوع زبان میتوانند برای ایجاد برنامههای بزرگ و پیچیده استفاده شوند.
- هر دو نوع زبان در صورت نوشتن کد درست و بهینه، میتوانند به نتایج مشابهی در اجرای برنامهها دست پیدا کنند.
تفاوتها
- روش اجرا: زبانهای مفسری کد را در زمان اجرا تفسیر و خط به خط آن را اجرا میکنند. در حالی که زبانهای کامپایلری کد را در زمان کامپایل ترجمه و خروجی کامپایل شده را اجرا میکنند.
- سرعت اجرا: بدون شک، زبانهای کامپایلری در سرعت اجرای برنامهها بهتر هستند. چرا که کامپایلر، کد را به صورت کامل به زبان ماشین ترجمه کرده و خروجی آن بهینه و سریع است. در مقابل، زبانهای مفسری برای هر دستوری که باید اجرا شود، باید کدها را تفسیر و سپس آن را اجرا کنند که باعث کاهش سرعت اجرای برنامه میشود.
- اشکالزدایی: اشکالزدایی برای زبانهای کامپایلری ممکن است کمی سخت باشد، زیرا خطاهایی که در زمان کامپایل رخ میدهند، باید توسط کدگذاری برطرف شوند. در مقابل، زبانهای مفسری به دلیل تفسیر دستورات، میتوانند اشکالزدایی را راحتتر پیش ببرند.
- پرتابهای استثناء (exception handling): برخلاف زبانهای کامپایلری، زبانهای مفسری به صورت پیش فرض پرتاب استثناء دارند. این به معنای این است که در صورت بروز خطا در هنگام اجرای برنامه، برنامه متوقف و خطایی به کاربر نمایش داده میشود.

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