تفاوت زبان های کامپایلری و مفسری در چیست؟
"کدهای برنامه نویسی از طریق مفسر (Interpreter) یا کامپایلر (Compiler) برای سیستم های کامپیوتری ترجمه می شوند. در حقیقت برنامه نویس با کمک مفسر یا کامپایلر زبان برنامه نویسی سطح بالا را به یک زبان ساده و قابل فهم تبدیل می کند. امروز در داناپ قصد داریم تفاوت های میان سیستم مفسر و کامپایلر را مورد بررسی قرار دهیم پس با ما همراه باشید."
کامپایلر چیست؟
کامپایلر (Compiler) برنامه یا مجموعهای از برنامههای کامپیوتری است که متنی از زبان برنامهنویسی سطح بالا (زبان مبدأ) را به زبانی سطح پایین (زبان مقصد)، مثل اسمبلی یا زبان سطح ماشین، تبدیل میکند. خروجی این برنامه ممکن است برای پردازش شدن توسط برنامه دیگری مثل پیونددهنده مناسب باشد یا فایل متنی باشد که انسان نیز بتواند آن را بخواند. به این علت فرودبر نامگذاری شدهاست که کد با زبان سطح بالا را به کد زبان سطح پایین تبدیل میکند بدون این که در رفتار کد تغییری حاصل شود. به عمل compile کردن فرودش گفته میشود. مهمترین علت استفاده از ترجمه کد مبدأ، ایجاد برنامه اجرایی است.
برعکس برنامهای که زبان برنامهنویسی سطح پایین را به بالاتر تبدیل میکند را مترجموارون گوییم. ترجمه کامل کد منبع برنامهای از یک زبان سطح بالا به کد شیء، پیش از اجرای برنامه را همگردانی یا کامپایل میگویند. به بیان ساده، کامپایلر برنامهای است که یک برنامه نوشته شده در یک زبان خاص ساختیافته را خوانده و آن را به یک برنامه مقصد (Target Language) تبدیل مینماید. در یکی از مهمترین پروسههای این تبدیل، کامپایلر وجود خطا را در برنامه مبدأ اعلام مینماید.
مفسر چیست؟
Interpreter (مُفسِر) یک برنامهٔ کامپیوتری است که هر خط از دستورات یک زبان سطح بالا را به کد ماشین تبدیل میکند. Compiler و Interpreter هر دو کاری یکسان، یعنی تبدیل کدهای زبان سطح بالا به کد ماشین، انجام میدهند اما کامپایلر کد را پیش از اجرای برنامه به کد ماشین تبدیل میکند (یعنی یک فایل اجرایی همچون exe میسازد) در حالی که مفسر کد را حین اجرا به کد ماشین تبدیل میکند.
همانطور که پیش از این گفته شد، اینترپریتر سورسکد را خط به خط در حین اجرا ترجمه میکند به طوری که سورس یک برنامهٔ نوشته شده با زبانی سطح بالا را به طور کامل به زبان ماشین ترجمه میکند و این در حالی است که مفسر اجازه میدهد تا ارزیابی و اصلاح برنامه در حین اجرا (Run-time) صورت پذیرد.
تفاوت مفسر و کامپایلر
۱- چگونگی اجرا شدن
در زبانهای کامپایلری ابتدا یکبار کدها به صورت کامل ترجمه میگردند. سپس برنامه برای اجرا از روی فایل کامپایل شده اجرا میگردد. اما در زبانهای مفسری کدها به صورت خط به خط تفسیر و اجرا میشوند. سپس هر دفعه که بخواهیم برنامه را دوباره اجرا کنیم به همین صورت کد تفسیر و اجرا میشود.
۲- وابسته بودن یا نبودن به سیستم عامل
یکی دیگر از تفاوتهای این زبانها این میباشد که زبان مفسری برای اجرا نیاز به یک نرمافزار مفسر یا interpreter دارد. اما زبان کامپایلری تنها یکبار کامپایل شده و کدهای قابل اجرا در ماشین را ایجاد میکند. از آن پس بر روی هر سیستمی بدون نیاز به کامپایلر قابل اجرا میباشد.
اما همین نکته این تفاوت را ایجاد میکند که زبان کامپایلر وابسته به سیستمعامل است، یعنی در صورتی اجرا خواهد شد که در آن سیستمعامل کامپایل شده باشد و در سیستمعاملهای دیگر اجرا نخواهد شد. اما زبان مفسر در هر سیستمعاملی که نرمافزار مفسر آن وجود داشته باشد اجرا و تفسیر میگردد. در واقع زبان مفسر وابسته به سیستمعامل نیست.
۳- سرعت و میزان استفاده از حافظه و پردازنده
زبان های Interpreter کدها را به صورت خط به خط تفسیر و اجرا میکنند، این کار باعث میشود تا مقدار زیادی از CPU و RAM کامپیوتر اشغال شود و مشخص است که سرعت پایینتری نیز خواهند داشت. اما کامپایل شدن یکبارهی زبانهای کامپایلر این است که در اجراهای متعدد سبکتر بوده و سرعت بهتری خواهند داشت.
۴- خطایابی
همین مزیتِ به صورتِ یکجا کامپایل شدن زبانهای کامپایلر در بخش خطایابی و رفع مشکل، نقص بهحساب میآید. زیرا در زبانهای مفسر هنگامیکه برنامه خط به خط اجرا میشود، در هر بخشی از برنامه که مشکلی وجود داشته باشد، قابل پیدا کردن و رفع میباشد. اما در زبانهای Compiler برای رفع یک مشکل در کدها میبایست سورس خود برنامه را مجدد بازیابی کرده، سپس خطا را پیدا و تصحیح کرد که این کار بسیار دشوارتر از کار با زبانهای مفسری است.
معرفی زبانهای مفسری و کامپایلری
از معروفترین زبانهای مفسری میتوانیم به زبانهای BASIC ،MATLAB ،Perl ،PHP ،Python ،Ruby و جاوا اسکریپت اشاره کنیم. همچنین معروفترین زبان های کامپایلری زبانهای C++ ،C# ،Pascal، جاوا و … هستند.
جمع بندی
به طور خلاصه وجه مشترک کامپایلرها و مفسرها تبدیل زبان برنامهنویسی سطح بالا به زبان قابل فهم برای ماشین است. اجرای زبانها مفسری کندتر است ولی خطایابی آنها ساده تر میباشد. در مقابل کامپایلرها مانند زبانهای مفسری که به مفسر وابسته اند به کامپایلر وابستگی ندارند. زبانهای مفسری به سیستم عامل وابستگی ندارند اما کدهای نوشته شده با زبان های کامپایلری برای اجرا در سیستم عامل جدید باید مجدد نوشته و کامپایل شوند.
ارسال دیدگاه