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

خلاصه
1404/05/11

تفاوت اصلی بین کامپایلر و مفسر در نحوه اجرای کد منبع (source code) است: **کامپایلر (Compiler):** * **ترجمه کامل:** کامپایلر کل کد منبع را به یکباره به کد ماشین (machine cod

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

تفاوت اصلی بین کامپایلر و مفسر در نحوه اجرای کد منبع (source code) است:

**کامپایلر (Compiler):**

* **ترجمه کامل:** کامپایلر کل کد منبع را به یکباره به کد ماشین (machine code) یا یک کد میانی (intermediate code) ترجمه می‌کند. این فرآیند را "کامپایل کردن" می‌نامند.
* **ایجاد فایل اجرایی:** نتیجه کامپایل، یک فایل اجرایی (executable file) است که می‌تواند مستقیماً توسط سیستم عامل اجرا شود (یا توسط یک ماشین مجازی مانند JVM برای کد میانی).
* **اجرای سریع‌تر:** اجرای فایل اجرایی که توسط کامپایلر تولید شده معمولاً سریع‌تر از اجرای کد توسط مفسر است، زیرا نیازی به ترجمه دوباره کد در زمان اجرا نیست.
* **تشخیص خطا قبل از اجرا:** کامپایلر می‌تواند بسیاری از خطاها را در زمان کامپایل تشخیص دهد، قبل از اینکه برنامه اجرا شود.
* **قابل حمل نبودن:** فایل اجرایی تولید شده معمولاً مختص سیستم عامل و معماری پردازنده خاصی است. برای اجرای برنامه روی سیستم عامل دیگر، باید دوباره کامپایل شود.

**مفسر (Interpreter):**

* **ترجمه خط به خط:** مفسر کد منبع را خط به خط می‌خواند و بلافاصله هر خط را اجرا می‌کند.
* **عدم ایجاد فایل اجرایی:** مفسر فایل اجرایی جداگانه تولید نمی‌کند.
* **اجرای کندتر:** اجرای کد توسط مفسر معمولاً کندتر از اجرای کد کامپایل شده است، زیرا هر خط کد در هر بار اجرا باید ترجمه شود.
* **تشخیص خطا در زمان اجرا:** خطاها معمولاً در زمان اجرا تشخیص داده می‌شوند، زمانی که مفسر به خطی از کد با خطا می‌رسد.
* **قابل حمل بودن:** کد منبع (script) می‌تواند روی هر سیستم عاملی که مفسر آن زبان را داشته باشد اجرا شود.

**خلاصه در جدول:**

| ویژگی | کامپایلر | مفسر |
| ------------- | ------------------------------------------- | -------------------------------------------- |
| نحوه ترجمه | ترجمه کامل کد منبع | ترجمه خط به خط کد منبع |
| خروجی | فایل اجرایی (یا کد میانی) | هیچ فایل اجرایی تولید نمی‌کند |
| سرعت اجرا | سریع‌تر | کندتر |
| تشخیص خطا | در زمان کامپایل | در زمان اجرا |
| قابلیت حمل | کمتر قابل حمل | بیشتر قابل حمل |

**مثال‌ها:**

* **زبان‌های کامپایلری:** C، C++، Go، Rust، Java (با کامپایل به bytecode که سپس توسط JVM تفسیر می‌شود)
* **زبان‌های تفسیری:** Python، JavaScript، PHP، Ruby

**نکات اضافی:**

* برخی از زبان‌ها ترکیبی از کامپایل و تفسیر را استفاده می‌کنند. برای مثال، زبان Java ابتدا به bytecode کامپایل می‌شود و سپس bytecode توسط ماشین مجازی Java (JVM) تفسیر می‌شود.
* اصطلاح "کامپایلر JIT" (Just-In-Time) به کامپایلرهایی اشاره دارد که در زمان اجرا کد را کامپایل می‌کنند. این روش تلاش می‌کند تا مزایای هر دو روش کامپایل و تفسیر را ترکیب کند.

انتخاب بین کامپایلر و مفسر بستگی به اهداف و نیازهای خاص پروژه دارد. اگر سرعت اجرا مهم باشد، کامپایلر معمولاً انتخاب به