تفاوت compiler و interpreter و IDE

خیلی از برنامه‌نویس‌های تازه کار این ۳ تا مفهوم رو با هم قاطی می‌کنن، اینجا می‌خوام یکبار برای همیشه تفاوت و شباهت‌های این ۳ مفهوم رو توضیح بدم.

اول: یه مفهوم کاملا متفاوت editor یا text editor

این برنامه، یه برنامه کاربردی برای ادیت کردن متن هست، نه لزوما برنامه بلکه هرمتنی با فرمت فایل‌های متنی (مثل txt)

چند مثال که حتما باهاشون کار کردید:

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

برنامه gedit که بسیار محبوبه و روی خیلی از توزیع‌های گنو/لینوکس نصب هست.

و برنامه‌های یک مقدار پیچیده تر مثل atom:

البته مثال‌های برنامه‌های از این دست بسیار زیاد است و هر کاربر بسته به نیازش یک نرم افزار را انتخاب می‌کند. مثلا: sublime text و geany و vs code و notepad++ و vim و nano و emacs و micro

تا اینجا فهمیدیم که text editor چیست و فهمیدیم که سال هاست بلدیم در یک tetx editor چند خط فایل بنویسیم و ذخیره کنیم مقلا من با gedit فایل my-text را ساختم و در پوشه home خودم دخیره کردم.




دوم: مفسر یا interpreter

یک سری از زبان‌های برنامه‌نویسی کد برنامه شما را به کمک interpreter تفسیر می‌کنند یعنی از بالا خط به خط می خوانند و اجرا می کنند. هر خطی را هم که متوجه نشوند (ما غلط نوشته باشیم یا هرچیزی) همان موقع اجرا خطا می دهند. برای زبان مفسری پایتون را مثال می‌زنم

برای مثال: خط زیر را وارد کرده و در فایل a.py ذخیره می‌کنیم:

print("hello world")

اکنون مفسر پایتون را به کار می‌گیریم و با زدن : python3 a.py برنامه ما اجرا می شود . خروجی چاپ می شود:

حال اگر دستور نامفهومی را برایش در ادامه print بنویسیم، تا قبل از رسیدن به آن برنامه را کامل اجرا می کند:

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

اکنون با رسیدن به خط دوم دچار خطا شده و ارور می‌دهد.




سوم: کامپایلر

نوع دیگری از زبان‌ها وجود دارند که برنامه را مستقیم اجرا نمی‌کنند، بلکه اول یک بخش، برنامه را کامل خوانده و بررسی کرده و ایرادات را گزارش می‌دهد، اگر ایرادی نبود، از کل برنامه یک فایل اجرایی (به زبان ماشین) تولید کرده (برای مثال فایل EXE) و در ادامه فایل اجرایی می تواند مستقل از هر برنامه دیگری اجرا شود. (توجه شود برنامه‌ای که با زبان برنامه نویسی مفسری نوشته می‌شد بدون مفسر فابل اجرا نبود)

حال بیایید همان تست قبلی را با زبان c++ که یه زبان کامپایلری است انجام دهیم:

کدی که در بالا مشاهده می‌کنید کد فابل فبول است، در مرحله دوم با دستور g++ از فایل متنی cpp یک فایل اجرایی با نام a.out تهیه کردیم.

در مرحله آخر برنامه را (فایل a.out را) اجرا کردیم.

اما اگر در کد ما خطایی باشی:

همانطور که مشاهده می‌کنید، در مرحله کامپایل به برنامه ما ایراد وارد شد و هیچ قسمتی اجرا نشد، نه helloworld نه ادامه برنامه زیرا با وجود اشکال در برنامه، اصلا فایل اجرایی ساخته نشده که آن را اجرا کنیم


خب تا اینجا تفاوت compiler و interpreter را فهمیدیم و فهمیدیم هردو چگونه ما را قادر به اجرا کردن کد می کنند ( در همین موضوع شاید برایتون جالب باشد تفاوت کد میانی و زبان ماشین را در این مطلب بخوانید: http://vrgl.ir/AHOlO )

به عنوان نکته عرض کنم برخی زبان‌ها در هر ۲ دسته قرار می‌گیرند مثلا جاوا هم کامپایل می‌شود و هم مفسر دارد، می‌توانید برای اطلاعات بیش‌تر سرچ کنید: is java interpreted or compiled




آخر: محیط توسعه نرم‌افزار یا IDE

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

برخی ide های معروف به شرح زیر هستند:

1- محصولات شرکت jetbrains برای زبان‌های برنامه‌نویسی مختلف مثل سی‌پلاس‌پلاس و پایتون و جاوا و php

۲− اکلیپس (eclipse) برای جاوا

۳− نت‌بینز (Net Beans) برای جاوا

۴− ویژوال استادیو برای سی‌شارپ

۵− اسپایدر (spyder) برای پایتون




توجه۰: اگرچه محیط توسعه نرم‌افزار بسیار خوب و کمک کننده است ولی نکته‌ای را که نباید فراموش کنیم این است که هرکاری را که با ide امکان‌پدیرباشد بدون ideنیز می‌توان انجام داد. (اگرچه به اندازه گزینه اول لذت بخش نباشد)

توجه۱: در متن از vs code و ویژوال استادیو جداگانه نام برده شد، توجه به این نکته ضروری است که مورد اول یک ادیتور قدرتمند از شرکت مایکروسافت است و مورد دوم یک ide انحصاری از همان شرکت (گاهی به VS‌مخفف می‌شود).

توجه۲: امروزه برخی text editor ها نیز قدرتمند شده و نصب افزونه امکاناتی در سطح ide ها ارائه می‌دهند برای مثال می‌توان برای atom یا vs code افزونه‌هایی نصب کرد که پیشنهادات خودکار بدهد یا برنامه زبان‌های مختلف را را اجرا کند و مرز بین ادیتور و ide کم‌رنگ می‌شود.

توجه۳: معمولا ide مخصوص یک زبان است ولی ادیتور محدودیتی ندارد.

توجه۴: قابلیتی موسوم به syntax highlight وجود دارد که ادیتور و ide ما کد‌های مختلف را به رنگ‌های محتلف دربیارود و باعث خوانایی کد می‌شود، همه‌ی ادیتور های نام‌برده شده از قابلیت syntax highlight برای بسیاری از زبان‌های برنامه‌نویسی بهره می‌بند به جز notepad شرکت مایکروسافت.