تقاوت زمان کامپایل با زمان اجرا

زمان کامپایل و زمان اجرا
زمان کامپایل و زمان اجرا


شاید تا به حال اصطلاح زمان اجرا و زمان کامپایل را شنیده اید. این دو جزو اصطلاحات برنامه نویسی می باشند که ممکن است در سایتهایی مثل Stackoverflow اشخاصی که برای رفع خطا دیگران را راهنمایی می کنند از این اصطلاحات استفاده کنند. در این پست تفاوت این دو اصطلاح را شرح می دهم.

زمان کامپایل

به زمانی که کد منبع به کد قابل اجرا (زبان ماشین) تبدیل می شود زمان کامپایل گفته می شود. اگر در زمان کامپایل کد منبع دارای خطا باشد مانند خطای نحوی کد منبع به کد قابل اجرا تبدیل نمی شود و خطا رخ میدهد

خطای نحوی:‌ اگر یکی از قوانین زبان برنامه نویسی را رعایت نکنید کامپایلر خطای نحوی یا Syntax Error صادر می کند.

مثالی از خطای زمان کامپایل

#include <stdio.h>
int main()
{
    printf("Hello World!")
    return 0;
}

در برنامه بالا به خاطر اینکه ';' را در خط ۴ فراموش کرده ایم خطای زیر صادر می شود و کد منبع به فایل اجرایی تبدیل نمی شود.

example.c: In function ‘main’:
example.c:6:24: error: expected ‘;’ before ‘return’
    6 |  printf("Hello World!")
          |                          ^
          |                           ;
          7 |  return 0;
          |  ~~~~~~     

زمان اجرا

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

به عنوان مثالی از خطای زمان اجرا به تکه کد زیر که با زبان C نوشته شده است توجه کنید:

#include <stdio.h>
float divideTwoNumber(float num1, float num2) 
{
	return num1 / num2;
}
int main()
{
	float result = divideTwoNumber(10, 2);
	printf("%.2f", result);
	return 0;
}

در برنامه بالا تابعی به نام divideTwoNumber نوشته ایم تا دو عدد صحیح دریافت کند و حاصل تقسیم عدد اول بر عدد دوم را به تابع فراخوان برگشت دهد. اگر مقداری مثل ۱۰ و ۲ را به تابع پاس دهیم مقدار 5.00 ظاهر می شود اما اگر مقداری مانند 10 و 0 را به تابع پاس دهیم از آنجایی که تقسیم بر صفر معنا ندارد خطای زیر ظاهر می شود که نمونه ای از خطاهای زمان اجرا می باشد.

[1]    13316 floating point exception (core dumped)  ./example

توجه

زمان کامپایل و زمان اجرا در زبانهای کامپایلری با زبان های مفسری ممکن است متفاوت باشد که در آینده این پست آپدیت می شود تا این موضوع را نیز پوشش دهد.