زبان های کامپایلردار در مقایسه با زبان های مفسردار

  • توسط صادقی
  • 0 دیدگاه
  • آموزش ها
زبان های کامپایلردار در مقایسه با زبان های مفسردار

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

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

از طرف دیگر زمانی که یک برنامه را با یک زبان کامپایلردار مینویسید، کد منبع باید قبل از اجر به دستورالعمل های قابل خواندن بوسیله ماشین، تبدیل شود. نحوه انجام این کار از زبانی به زبان دیگر فرق می کند. زمانی که به زبان C برنامه نویسی می کنید، از یک کامپایلر برای تبدیل کد منبع با یک کد قابل خواندن بوسیله ماشين، استفاده می نمائید. سپس کد در یک قالب اجرایی ذخیره می شو به طوری که میتوان از آن استفاده کرد. زمانی که به زبان Java برنامه نویسی میکنید، کد منبع با یک قالب میانی به نام bytecode کامپایل می شود و در آن قالب ذخیره می شود. زمانی که یک برنامه Java را اجرا می کنید، ماشین مجازی byte code , Java را به کد قابل خواندن توسط ماشین برای محیط اجرا شونده خود تبدیل می کند و کد را اجرا می نماید.

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

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

به طور مثال اگر اجازه دهید، فرض کنیم شما یک متن Shell نوشته اید که از بین موارد دیگر یک کارت اعتباری را برای پردازش، ارائه می نماید. اگر پس از ارائه کارت اعتباری، در برنامه شما یک خطای نحوی وجود داشته باشد، باید کارت دیگری ارائه کنید تا مشخص کنید که آیا پس از تغيير، اشکال رفع شده است یا خیر. این امر میتواند اشکال زدایی از برنامه های مفسردار را خیلی عذاب آور سازد (خوشبختانه در این مور اكثر سرویس های بررسی کارت اعتباری، اعداد تقلبی کارت اعتباری را به شما ارائه می کنند که می توانید از آن برای تست برنامه خود استفاده نمایید). معمولا در این شرایط دستورالعمل هابی ارائه می دهید که تغییرات دائمی برای اشکال زدایی را موجب می شوند.

مقایسه مفسر و کامپایلر 

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

منبع: شرکت طراحی سایت نوپرداز nopardazco.com

زبان های کامپایلردار در مقایسه با زبان های مفسردار 4از 5براساس 57 رای

0 دیدگاه

دیدگاه خود را ارسال کنید

12 + 3 =