| اجرای برنامه |
| --- |
| 
مفاهیم عمومی |
| * کد
* ترجمه
	+ کامپایلر
		- زمان کامپایل
	+ کامپایلر بهینه‌ساز
* نمایش میانی (IR)
* اجرا
	+ سیستم زمان اجرا
		- زمان اجرا
	+ اجراپذیر
	+ مفسر
	+ ماشین مجازی
 |
| 
انواع کد |
| * کد منبع
* آبجکت کد
* بایت‌کد
* کد ماشین
* ریزبرنامه‌سازی
 |
| 
راهبردهای کامپایل |
| * درجا (JIT)
	+ ردیابی درجا
* جلوتر از زمان (AOT)
* تراکامپایل
* کامپایل مجدد
 |
| 
زمان اجرای قابل ذکر |
| * زمان اجرای اندروید (ART)
* زمان اجرای زبان مشترک (CLR) & مونو
* crt0
* ماشین مجازی هیپ‌هاپ
* ماشین مجازی جاوا (JVM)
* آبجکتیو-سی
* وی۸
	+ نود.جی‌اس
* پای‌پای
* موتور زند
 |
| 
کامپایلرها و زنجیرابزارهای قابل ذکر |
| * کلکسیون کامپایلرهای گنو (GCC)
* ال‌ال‌وی‌ام
	+ کلنگ
 |
| * ن
* ب
* و
 |

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

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

زمینهٔ اجرا
-----------

زمینه‌ای که اجرا (execution) در آن اتفاق می‌افتد بسیار مهم است. تعداد بسیار کمی برنامه در ماشین برهنه (bare machine) اجرا می‌شوند. برنامه‌ها معمولاً حاوی فرضیات ضمنی و صریح در مورد منابع موجود در زمان اجرا هستند. اکثر برنامه‌ها با پشتیبانی یک سیستم عامل و کتابخانه زمان اجرا مخصوص به زبان مبدأ اجرا می‌شوند که خدمات حیاتی را ارائه می‌دهند که به‌طور مستقیم توسط خود رایانه تهیه نمی‌شود. برای مثال، این محیط حمایتی معمولاً برنامه را از پیاده‌سازی مستقیم وسایل جانبی رایانه جدا می‌کند و به جای آن خدمات کلی و انتزاعی ارائه می‌دهد.

فرایند
------

قبل از اجرا، ابتدا یک برنامه باید نوشته شود. این کار به‌طور کلی در کد منبع انجام می‌شود، که سپس در مدت زمان کامپایل (و پیوند استاتیکی در زمان پیوند) به یک فایل اجرایی ترجمه می‌شود. سپس این فایل اجرایی اغلب توسط یک سیستم عامل فراخوانی می‌شود که برنامه را در حافظه بارگذاری می‌کند (زمان بار)، احتمالاً پیونددهنده پویا (داینامیک) را انجام می‌دهد و سپس با انتقال کنترل به نقطه ابتدایی برنامه، اجرای آن را شروع می‌کند. تمام این مراحل بستگی به رابط دودویی نرم‌افزار سیستم عامل دارد. در این مرحله اجرا شروع می‌شود و برنامه وارد مرحلهٔ زمان اجرا می‌شود. سپس برنامه تا زمانی که تمام شود، اجرا می‌گردد؛ چه به‌طور طبیعی خاتمه یابد و چه از کار افتد (از کار افتادن).

مفسر
----

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

برای مشاهده بیشتر
-----------------

* اجراپذیر
* سیستم زمان اجرا
* خطای زمان اجرا
* شمارنده برنامه