در حال حاضر، تعداد زیادی زبان برنامهنویسی وجود دارد که هر کدام ویژگیهای خاص خود را دارند و برای کاربردهای ویژهای طراحی شدهاند. برخی منابع از وجود حدود 250 زبان برنامهنویسی صحبت میکنند، اما اگر زبانهای تاریخی، حوزهخاص و زبانهای عجیب و غریب را نیز در نظر بگیریم، این تعداد میتواند به هزاران مورد افزایش یابد.
این زبانهای برنامهنویسی را میتوان به روشهای مختلفی دستهبندی و بررسی کرد. یکی از مهمترین تقسیمبندیها، تمایز بین زبانهای کامپایلری و مفسری است. در اینجا، ما به بررسی این دو نوع زبان و نکات مثبت و منفی هر کدام میپردازیم.
زبان های برنامه نویسی در کل چطور کار می کنند؟
هر برنامه کامپیوتری، در اصل مجموعهای از دستورالعملهاست که به کامپیوتر میگوید چه کاری انجام دهد. این دستورالعملها میتوانند از عملیات سادهای مانند جمع کردن دو عدد گرفته تا وظایف پیچیدهتری مثل ارسال درخواست از طریق اینترنت یا پردازش تصاویر را شامل شوند.
زبانهای برنامهنویسی به ما امکان میدهند تا این دستورالعملها را به شکلی قابل فهم برای انسان بنویسیم. اما کامپیوترها نمیتوانند مستقیماً این کد را اجرا کنند. اینجاست که کامپایلرها و مفسرها وارد عمل میشوند.
کامپایلرها و مفسرها دو روش اصلی برای تبدیل کد منبع (کد نوشته شده توسط برنامهنویس) به زبان ماشین (دستورالعملهای باینری که کامپیوتر میتواند اجرا کند) هستند.
مطالب مرتبط:
زبانهای کامپایلری
زبانهای کامپایلری، زبانهایی هستند که در آنها کد منبع به طور کامل به زبان باینری تبدیل میشود. برای درک بهتر این مفهوم، مثالی میزنیم:
فرض کنید نوشتهای به زبان انگلیسی دارید، اما شما زبان انگلیسی نمیدانید و نمیتوانید آن را بخوانید. اگر شخصی این نوشته را به طور کامل به فارسی ترجمه کند و به شما بدهد، حالا شما و هر کسی که زبان فارسی میداند، میتواند آن را بخواند.
کامپایلرها نیز دقیقاً همین کار را انجام میدهند: کد منبع را به زبان قابل فهم برای کامپیوتر (باینری) تبدیل میکنند. این زبانها چند ویژگی مهم دارند:
- سرعت اجرای بالا: برنامههای نوشته شده با زبانهای کامپایلری معمولاً سریعتر اجرا میشوند.
- دسترسی بیشتر به سختافزار: این زبانها به برنامهنویس اجازه میدهند تا کنترل بیشتری بر روی سختافزار کامپیوتر داشته باشد.
- اجرای مستقل: پس از کامپایل، برنامه میتواند بدون نیاز به نرمافزار واسط دیگری اجرا شود.
- تشخیص خطاها قبل از اجرا: کامپایلر میتواند بسیاری از خطاهای برنامه را قبل از اجرا شناسایی کند.
نمونههای معروف زبانهای کامپایلری عبارتند از C، C++، و Rust.
زبان های مفسری
زبانهای مفسری، برخلاف زبانهای کامپایلری، کد منبع را به طور کامل به زبان باینری تبدیل نمیکنند. در این نوع زبانها، یک برنامه به نام “مفسر” (interpreter) وظیفه خواندن و اجرای کد را بر عهده دارد. بیایید به مثالی که برای زبان کامپایلری زدیم بگردیم.
تصور کنید به جای اینکه یک متن انگلیسی را ابتدا به طور کامل به فارسی ترجمه کنند و سپس به شما بدهند، یک مترجم در کنار شما نشسته و همزمان که متن انگلیسی را میخواند، آن را برای شما به فارسی ترجمه میکند. این دقیقاً همان کاری است که مفسر در زبانهای مفسری انجام میدهد: خواندن کد منبع، تفسیر و اجرای آن، خط به خط و در لحظه.
ویژگیهای کلیدی زبانهای مفسری:
- اجرای در لحظه: کد بلافاصله پس از نوشته شدن قابل اجراست، بدون نیاز به مرحله کامپایل.
- قابلیت حمل بالا: معمولاً میتوان کد را روی هر سیستمی که مفسر مربوطه را دارد، اجرا کرد.
- دیباگ آسانتر: به دلیل اجرای خط به خط، یافتن و رفع خطاها سادهتر است.
- سرعت توسعه بالاتر: به دلیل عدم نیاز به کامپایل مجدد پس از هر تغییر، توسعه برنامه سریعتر انجام میشود.
- سینتکس خوانا: اغلب زبانهای مفسری دارای سینتکس ساده و قابل فهم هستند.
به دلیل فرآیند تفسیر در لحظه، زبانهای مفسری معمولاً کندتر از زبانهای کامپایلری اجرا میشوند. اما این تفاوت سرعت در بسیاری از کاربردها قابل چشمپوشی است و مزایای دیگر این زبانها آن را جبران میکند.
نمونههای معروف زبانهای مفسری عبارتند از Python، JavaScript، و Ruby.
زبانهای کامپایلری و مفسری کدام بهتر است ؟
همه زبان های برنامه نویسی یک سری مزایا و معایب دارند. برخی در یک موارد عالی عمل می کنند و برخی در موارد دیگر عالی کار می کنند. ما نمی توانیم بگوییم که کدام زبان بهترین زبان است زیرا هرکدام در جای خودش کاربرد عالی دارد. مانند این هست که بگوییم آچار بهتر است یا پیچ گوشتی.
اگر سرعت برنامه برای شما اهمیت دارد و می خواهید دسترسی بیشتری به سخت افزار و حافظه داشته باشید و با سرعت توسعه پایین در زبان های کامپایلری اهمیت ندارند. استفاده از زبان کامپایلری برای برنامه شما مناسب تر می باشد.
اما اگر برای شما سرعت توسعه برای شما اهمیت بیشتری دارد و سرعت پایین اجرا برای برنامه شما مشکلی خاصی به وجود نمی آورد می توانید از زبان های مفسری استفاده کنید.
جدول مقایسه زبانهای کامپایلری و مفسری
معیار | زبانهای کامپایلری | زبانهای مفسری |
سرعت اجرا | بالا، به دلیل تبدیل مستقیم کد به زبان ماشین | پایینتر، به دلیل تفسیر کد در زمان اجرا |
سرعت توسعه | پایینتر، به دلیل نیاز به کامپایل کردن کد | بالا، به دلیل اجرای مستقیم و نیاز کمتر به کامپایل |
دسترسی به سختافزار و حافظه | بیشتر، به دلیل نزدیکی به زبان ماشین | کمتر، به دلیل انتزاع بیشتر از سختافزار |
اشکالزدایی | پیچیدهتر، به دلیل خطاهای زمان کامپایل و نیاز به کامپایل مجدد | سادهتر، به دلیل اجرای خط به خط و گزارش خطاها در زمان اجرا |
قابل حمل بودن برنامه* | کمتر، به دلیل وابستگی به معماری و سیستم عامل | بیشتر، به دلیل اجرای روی محیطهای مختلف بدون نیاز به تغییر |
کاربردها | مناسب برای برنامههای با کارایی بالا و سیستمهای تعبیه شده | مناسب برای برنامههای وب، اسکریپتها و نمونهسازی سریع |
استفاده از منابع سیستم | بهینهتر، به دلیل بهینهسازی در زمان کامپایل | کمتر بهینه، به دلیل تفسیر در زمان اجرا |
یادگیری و استفاده | معمولاً سختتر، به دلیل پیچیدگیهای کامپایل و نیاز به دانش بیشتر از سیستم | آسانتر، به دلیل سادگی و اجرای مستقیم |
* کدی که به زبان باینری کامپایل می شود فقط در روی همان معماری سیتستم و سیستم عامل جواب می دهد. درصورتی که بخواهیم که کد را روی سیستم دیگر اجرا کنیم باید کد منبع را با کامپایلر مخصوص همان سیستم به زبان باینری برگردانیم تا بتوانیم آن را در سیستم دیگر اجرا کنیم. در صورتی که زبان مفسری به خاطر اینکه تفسیر در زمان اجر انجام می شود این مشکلات را ندارد برای همین می گویند قابلیت حمل برنامه این زبان ها بیشتر است.
on زبانهای کامپایلری و مفسری: نبرد سرعت و انعطافپذیری