کامپایلر چیست؟ | آشنایی کامل با مفهوم و کاربرد Compiler
کامپایلر (Compiler) نرمافزاری است که کدهای نوشتهشده توسط برنامهنویس را از زبان سطح بالا (مثل ++C، Java یا C#) به زبان ماشین یا باینری (قابل فهم برای رایانه) ترجمه میکند. در واقع کامپایلر پلی است میان انسان و کامپیوتر؛ زیرا انسانها با زبانهای سطح بالا برنامه مینویسند، اما رایانه فقط زبان صفر و یک را میفهمد.
برای شرکت در دوره آموزش صفر تا صد زبان برنامه نویسی c رایگان کلیک کنید.
پیش از هر چیز؛ کامپایلر چیست؟
کامپایلر به برنامه یا مجموعهای از برنامههای کامپیوتری گفته می شود که متنی از زبان برنامهنویسی سطح بالا (زبان مبدأ) را به زبانی سطح پایین (زبان مقصد)، تبدیل میکند. خروجی این برنامه ممکن است برای پردازش شدن توسط برنامه دیگری مثل پیونددهنده مناسب باشد یا فایل متنی ای بصورت نوشتاری انگلیسی باشد تا بتوانیم آن را بخوانیم. مهمترین دلیل استفاده از ترجمه کد مبدأ، ایجاد برنامه اجرایی میباشد.
در واقع بطور کلی ترجمه کامل زمان منبع برنامهای از یک زبان سطح بالا به کد، پیش از اجرای برنامه را کامپایل میگویند. به بیان ساده، کامپایلر برنامهای است که یک برنامه نوشته شده در یک زبان خاص ساختیافته را خوانده و آن را به یک برنامه مقصد تبدیل می کند.
کامپایلر چگونه کار می کند؟

معمولا یک برنامهنویس با استفاده از ویرایشگر، جملات زبان را به زبانی مانند پاسکال یا C به صورت خطی می نویسد. فایلی که از این خط ها ایجاد میشود شامل مواردی است که گفتههای منبع را بازگو میکند. سپس برنامهنویس، کامپایلر زبان مناسب را انتخاب و اجرا میکند. کامپایلر ابتدا تمام عبارات زبان را به صورت نحوی یکی پس از دیگری تجزیه و تحلیل میکند و سپس، در یک یا چند مرحله متوالی، کد خروجی را میسازد، و مطمئن میشود که عباراتی که به سایر عبارات در کد نهایی هستند به درستی ارجاع شدند.
فرآیند کامپایل شامل چند مرحله اصلی است:
- Lexical Analysis (تجزیه واژگانی): شناسایی ساختار و کلمات کلیدی کد.
- Syntax Analysis (تحلیل نحوی): بررسی دستور زبان برنامه.
- Semantic Analysis (تحلیل معنایی): اطمینان از درست بودن منطق برنامه.
- Optimization (بهینهسازی): کاهش حجم و افزایش سرعت اجرای کد.
- Code Generation (تولید کد): تبدیل به زبان ماشین یا فایل اجرایی.
- Code Linking: ترکیب تمام بخشهای کد و آمادهسازی برای اجرا.
انواع کامپایلرها
- کامپایلر سنتی (Traditional Compiler): کد را مستقیماً به زبان ماشین ترجمه میکند.
- Cross Compiler: خروجی را برای پلتفرمی متفاوت از سیستم فعلی تولید میکند.
- JIT Compiler (Just In Time): در زمان اجرا کد را کامپایل میکند (مثل Java).
- Incremental Compiler: فقط بخشهای تغییر یافته برنامه را کامپایل میکند.
به مفهوم و روش عملکر کامپایلر ها پرداختیم و آنها را بررسی کریدم. حالا سه نوع اصلی کامپایلر ها را معرفی می کنیم و هر یک را مختصرا توضیح می دهیم. بطور کلی سه نوع کامپایلر داریم. کامپایلر تک گذره، کامپایلر دو گذره و کامپایلر چند گذره.
1. کامپایلر تک گذره
در کامپایلرهای تک گذره، کد منبع به طور مستقیم به کدهای دودویی ماشین تبدیل میشود. این کامپایلر فقط یک بار از هر بخش برنامه عبور میکند و هر بخش برای کدهای نهایی ماشین ترجمه میشود. این فرآیند روی همه خطهای کد منبع انجام و تکرار میشود تا کامپایل کل برنامه و تبدیل کدهای آن به کد دودویی ماشین انجام شود.
2 . کامپایلر دو گذره
کامپایلرهای دو گذره همانطور که از نامش مشخص است از دو مرحله اصلی گذر می کند. کامپایلر دو گذره به دو بخش اصلی فرانت اند و بک اند به صورت زیر تقسیم میشوند:
- فرانتاند: این بخش از کامپایلرهای دو گذره، کدهای منطقی را به نمایش میانی نگاشت میکنند.
- بکاند: سپس در این بخش از عملکرد این نوع کامپایلری، نمایش میانی به کدهای هدف ماشین نگاشت میشوند.
3 . کامپایلر چند گذره
کامپایلرهای چند گذره، کد منبع را چند بار پردازش میکنند. این نوع کامپایلر یک برنامه بزرگ را به چند برنامه کوچک تقسیم و هر کدام از آنها را به صورت جداگانه پردازش میکند. کامپایلرهای چند گذره، چندین کد میانی را توسعه میدهند. گذرها یا فازهای چندگانه این کامپایلر، خروجی فاز قبل را به عنوان ورودی فاز جدید دریافت میکنند، بنابراین، این روش به حافظه کمتری نیاز دارد.
دو مشخصهی کامپایلر های چند گذره:
- مستقل بودن کامپایلر چند گذره از ماشین: فازهای کامپایلر چند گذره را میتوان برای سخت افزار یا همان ماشینهای مختلف مورد استفاده مجدد قرار داد.
- دارا بودن زبانهای بیانی بیشتر: وجود چندین فاز نیاز به اعلامیههای رو به جلو را از بین میبرند و امکان پیادهسازی بازگشت متقابل را به خوبی به وجود می آورند.
وظیفه کامپایلر چیست؟
کامپایلر کد منبع (Source Code) را مرحلهبهمرحله بررسی کرده و خطاهای نحوی (Syntax Errors) را شناسایی میکند. سپس کد صحیح را به یک فایل اجرایی (Executable File) تبدیل میکند. هدف اصلی کامپایلر افزایش کارایی برنامه، کاهش خطا و آمادهسازی آن برای اجرا توسط سیستم عامل است.
تفاوت کامپایلر و مفسر (Interpreter)
بسیاری از زبانها مانند Python از مفسر استفاده میکنند، در حالی که زبانهایی مانند C++ و Java دارای کامپایلر هستند.
- کامپایلر: کل برنامه را یکباره ترجمه و سپس اجرا میکند (سرعت بالا).
- مفسر: کد را خطبهخط تفسیر و اجرا میکند (مناسب برای تست و یادگیری).
به بیان ساده، کامپایلر سریعتر اما پیچیدهتر است؛ در حالی که مفسر کندتر اما قابلدرکتر برای تازهکاران میباشد.
مثال ساده از عملکرد کامپایلر
فرض کنید در زبان ++C کد زیر را مینویسید:
#include <iostream>
using namespace std;
int main() {
cout << “Hello, World!”;
return 0;
}
کامپایلر این کد را به زبان ماشین تبدیل کرده و در نهایت فایلی به نام a.exe یا مشابه آن تولید میکند. وقتی این فایل را اجرا میکنید، خروجی روی صفحه نمایش داده میشود.
کامپایلر در زبانهای مختلف برنامه نویسی

- C و ++C: از کامپایلر GCC یا Clang استفاده میکنند.
- Java: از کامپایلر javac برای تبدیل کد به bytecode بهره میگیرد.
- C#: از Roslyn Compiler برای تولید فایلهای اجرایی استفاده میشود.
- Swift: از Swift Compiler اپل برای iOS و macOS بهره میبرد.
برترین کامپایلر های زبان C
زبان C از پر پیشینه ترین زبان های برنامه نویسی است و گذشته ای طولانی تر از دیگر زبانهای برنامه نویسی دارد. از برترین زبان ها از نظر کامپایل شوندگی است. با این اوصاف دور از ذهن نیست که وقتی دنبال کامپایلر زبان c بگردیم به گزینه های خوب زیادی بر بخوریم. دز ادامه به معرفی تعداد یاز معروف ترین این کامپایلر ها می پردازیم.
-
کامپایلر Tiny C
کامپایلر تاینی سی، کامپایلری سریع و سبک است. این کامپایلر برای کار بر روی کامپیوترهای کند با فضای کم دیسک طراحی شده است. و از سال ۲۰۰۵ شروع به پشتیبانی از ویندوز کرد. حجم پروندههای این کامپایلر بسیار کم است. و همچنین از سرعتی بسیار بیشتر نسبت به سایر کامپایلر ها برخوردار است. کامپایلر تاینی سی همچنین دارای جستجوگری قدرتمند است که در کنار سرعت و سبک بودن آن موجب محبوبیت بالایش شده است.
-
کامپایلر GCC
این کامپایلر از بسیاری از زبانهای برنامهنویسی پشتیبانی میکند و یک بنیاد نرم افزار رایگان تحت مجوز عمومی و جهانی است. این کامپایلر برای اولین بار در سال ۱۹۸۷ منتشر شد و در ابتدا فقط از زبان برنامه نویسی C پشتیبانی میکرد. اما با گذشت زمان توسعه بیشتری یافت. کامپایلر GCC، کامپایلر محبوب و قدرتمندی است و بسیاری از برنامه نویسان با آن نسبت به سایر کامپایلر ها احساس راحتی بیشتری می کنند.
-
کامپایلر Borland Turbo C
توربو سی یکی از کامپایلرهای اساسی و محبوب زبان برنامه نویسی سی است. این کامپایلر اولین بار در سال ۱۹۸۷ معرفی شد. و به دلیل اندازه کوچک، سرعت تدوین و قیمت پایین محبوب بود. بعد از اینکه ++Turbo C در سال ۱۹۹۰ منتشر شد دیگر تمام کامپایلرها با یکدیگر ادغام شدند و کامپایلر Turbo C متوقف شد. اما در سال ۲۰۰۶ شرکت توربو سی نسخه دیگری از آن را مجدداً به عنوان نرم افزار رایگان عرضه کرد.
-
کامپایلر Portable C
کامپایلر قابل حمل سی، تقریبا یک کامپایلر اولیه بهحساب میآید که تاسیس آن حدودا به زمان تاسیس زبان برنامه نویسی C در سال ۱۹۷۰ باز میگردد. میتوان گفت عمر کامپایلر Portable C به شکل قابل توجهی طولانی بوده است به طوری که اکثریت نرم افزارها با استفاده از این کامپایلر ایجاد شدهاند. این کامپایلر هم میان کامپایلر های دیگر دارای سبکی و سرعت خوبی است و از محبوبیت بالایی برخوردار می باشد.

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