در توسینسو تدریس کنید

و

با دانش خود درآمد کسب کنید

تفاوت بین Compiler (کامپایلر) و Interpreter (مفسر) در چیست؟

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

مهمترین تفاوتی که بین یک Compiler و یک Interpreter وجود دارد روشی است که آنها کد اجرایی برنامه را اجرا می کنند. زمانیکه شما توسط Interpreter یا مفسر کد را اجرا می کند ، کد در همان لحظه بصورت خط به خط اجرا می شود و بصورت خط به خط برای کامپیوتر کدها جهت اجرا ارسال و ترجمه می گردند در مقابل زمانیکه شما یک کد برنامه را توسط Compiler یا کامپایلر اجرا می کنید ، کامپایلر کد شما را یکباره اجرا نمی کند بلکه کد را بصورت کامل بر روی دیسک شما قرار می دهد و به شما این امکان داده می شود که هر زمانی که دوست داشتید کد اجرایی را اجرا کنید. در این مقاله از لفظ کامپایلر به جای Compiler و همچنین مفسر به جای Interpreter استفاده خواهیم کرد.

تفاوت زبان برنامه نویسی کامپایلری و مفسری

وابسته بودن به سیستم عامل یا عدم وابستگی ؟ مسئله این است

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

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

تفاوت زبان های برنامه نویسی مفسری و کامپایلر

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

کارایی بهتر یا انعطاف پذیری بیشتر ؟ مسئله این است

نقطه منفی استفاده کردن از زبان های مفسری این است که یک Overhead یا دردسر اضافه ایجاد می کند. با توجه به اینکه کدهای اجرایی برنامه در نرم افزارهای مفسری بصورت خط به خط اجرا می شوند اینکار باعث بالا رفتن میزان استفاده از منابع CPU و RAM سیستم می شود ، اما زمانیکه یک برنامه کامپایل شد ، بصورت یکباره اجرا می شود و نیازی به اجرا و پردازش هر خط برنامه بصورت جداگانه نخواهد بود .

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

خطایابی ساده یا خطایابی دشوار ؟ مسئله این است

همانطور که گفتیم کدهای اجرایی برنامه در برنامه های مفسری بصورت خط به خط یا Line To Line ترجمه و اجرا می شوند ، این قابلیت به شما به عنوان یک برنامه نویس اجازه می دهد که هر جایی از برنامه که به مشکل خوردید متوجه شوید که در کجا مشکل پیش آمده است و در جهت رفع مشکل اقدام کنید. شما می توانید در حین اجرا شدن خط به خط کدها ، آنها را تغییر دهید و بلافاصله تغییرات را مشاهده کنید ، اما مشکل تغییر کد نیز در این است که با هر بار تغییر دادن کد نرم افزار ، نرم افزار مجددا از ابتدا باید تفسیر یا Interpret شود.

اما زمانیکه شما از یک کامپایلر استفاده می کنید ، برای خطایابی ابتدا باید صبر کنید تا کد برنامه بصورت کامل کامپایل شود ، بعد از کامپایل شدن می توانید آن را مشاهده و خطایابی کنید و در صورت پیدا کردن خطا نمی توانید در همان لحظه خطا را تصحیح کنید بلکه باید Source Code اصلی برنامه را مجددا تصحیح و نرم افزار مجددا کامپایل کنید تا بتوانید مشکل به وجود آمده را حل کنید که این خود زمانگیر است.

معرفی زبان های مفسری و کامپایلری مختلف

از معروف ترین زبان های مفسری دنیا که بیشتری استفاده را دارند می توانیم به زبان های BASIC ، جاوا اسکریپت ، Jscript ، MATLAB ، Perl ، PHP ، Python ، List ، PostScript ، Ruby ، VBScript و PowerShell اشاره کنیم و در عین حال از معروف ترین زبان های کامپایلری دنیا که بیشترین استفاده را دارند می توانیم به زبان های ALGOL ، Visual Basic ، True Basic ، GCC ، Visual C++ ، Borland C++ ، Visual C# ، Mono ( Xamarin ) ، Visual Cobol و Turbo Pascal اشاره کنیم. بنابراین بصورت خلاصه می توانیم تفاوت بین یک زبان مفسری و یک زبان کامپایلری را به شکل زیر عنوان کنیم :

  1. زبان های مفسری بصورت خط به خط کدها را خوانده و اجرا می کنند
  2. زبان های کامپایلری به یکباره کد برنامه را خوانده و آن را هر زمان که نیاز باشد اجرا می کنند
  3. برنامه ها در زبان های مفسری وابستگی به سیستم عامل ندارند و در هر سیستم عاملی قابل اجرا هستند
  4. برنامه ها در زبان های کامپایلری برای هر سیستم عامل متفاوتی بایستی تغییر کد و مجددا کامپایل شوند
  5. برای اجرا یک برنامه مفسری باید مفسیر مورد نظر بر روی سیستم عامل حتما نصب شده باشد
  6. برای اجرا یک برنامه کامپایلری نیازی به وجود داشتن کامپایلر بر روی سیستم عامل نمی باشد
  7. سرعت اجرای برنامه های مفسری بسیار کند است
  8. سرعت اجرای برنامه های کامپایلری بسیار سریع است
  9. خطایابی کدهای اجرایی در برنامه های مفسری با توجه به اجرا خط به خط آسانتر است
  10. خطایابی کدهای اجرایی در برنامه های کامپایلری با توجه به اجرای کامل برنامه کمی دشوارتر است ITPRO باشید

نویسنده : محمد نصیری

منبع : انجمن تخصصی فناوری اطلاعات ایران

هرگونه نشر و کپی برداری بدون ذکر منبع و نام نویسنده دارای اشکال اخلاقی می باشد

#نسل_جدید_کامپایلر_های_دات_نت_roslyn #زبان_های_برنامه_نویسی_کامپایلری_و_مفسری #compiler_چیست #interpreter_چیست #مقایسه_کامپایلر_و_مفسر #بهترین_نرم_افزارهای_کامپایلر #تفاوت_کامپایلر_و_مفسر #کامپایلر_چیست #بهبود_کامپایلر_های_دات_نت #مقایسه_compiler_و_interpreter
10 نظر
مهدی باقری

عکس ها فوق العادست

علی  ورزشی

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

محمد نصیری

خیلی عالیه چرا که نه ... اصل ITPRO یعنی همین ... منتظریم

samurai

مهندس درود

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

محمد نصیری

Bash Shell لینوکس یک مفسر یا interpreter هست .

samurai

سپاس

پس چطور میگن کامند های لینوکس در دایرکتوری مثلا bin از طریق کامپایلر c کامپایل شده اند و خروجی باینریشون اونجاست؟

محمد نصیری

اگر شما از CShell استفاده کنید طبیعتا از زبان C استفاده کردید ، بصورت پیشفرض دستورات لینوکس در CShell نیستن و در BASH Shell هستند ، Bash هم طبیعتا فقط Interpreter هست ، ما Shell پیشفرض لینوکس رو مد نظرمون هست.

بیات

پس از کامپایل یک کد گفتید باتغییر سیستم عامل بایدباز کامپایل بشه

مثلا اگه تویه ویندوز باشه بره لینوکس اره درسته

امااگه از یک ویندوز 32بیتی به یک ویندوز 32 بیتی دیگه بره بازم بایدکامپایل بشه؟

ضمنا ازاین قالب جدید سایت بدم میاد خیلی زشته

قبلی بسیار دوستانه تر و سرراست تر و ساده تر و خوش فرم تر بود

بهنام کرجی

سلام . مطلب بسیار مفید بود . فقط یک سوال ؟

نظر اساتید در مورد امنیت کدها در زبانهای مفسر چیه ؟ آیا راهی برای از دسترس خارج کردن کدها در زبانی مثل پایتون هست ؟؟

ممنون

محمد نصیری

به نظرم بهتره این سئوال رو در قالب گزینه سئوال بپرسید مطرح کنید در جزیره امنیت.

نظر شما
برای ارسال نظر باید وارد شوید.
از سرتاسر توسینسو
تنظیمات حریم خصوصی
تائید صرفنظر
×

تو می تونی بهترین نتیجه رو تضمینی با بهترین های ایران بدست بیاری ، پس مقایسه کن و بعد خرید کن : فقط توی جشنواره تابستانه می تونی امروز ارزونتر از فردا خرید کنی ....