در این مقاله از مقالاتبرنامه نویسی وب، به معرفی زبانهای مفسری و کامپایلری میپردازیم و به سوال کامپایلر چیست؟ و مفسر چیست؟ پاسخ میدهیم. سپس تفاوت مفسر و کامپایلر را بررسی میکنیم. زمانی که ما یک برنامه با زبان سطح بالا مینویسیم برای مثال C ،C++ ، java و … کامپیوتر درکی از برنامهای که ما نوشتیم ندارد. زیرا کد ماشین یک کد صفر و یک میباشد و برای اینکه برنامه ما قابلفهم برای ماشین باشد نیاز به چیزی داریم که این برنامه سطح بالا را به کد ماشین تبدیل کند. اینجاست که میتوانیم از مفسر و کامپایلر استفاده کنیم. به طور کلی زبانهای برنامهنویسی به دو نوع اصلی زبانهای مفسری (interpreter) و زبانهای کامپایلری (compiler) تقسیم میشود.
کامپایلر
چیست؟
مجموعهای از برنامه یا برنامههای کامپیوتری هستند که زبان برنامهنویسی سطح بالا (زبان مبدا) را به زبانی سطح پایین (زبان مقصد) و قابلفهم برای سختافزار تبدیل میکند. به عبارتی دیگر کدهای ماشین به سادگی قابلفهم برای انسان نیستند و به همین خاطر انسان به زبانهای سطح بالا که قابلفهمتر هستند، برنامه مینویسد و با استفاده از کامپایلرها آن را به زبان سطح پایین تبدیل میکند.
سازوکار کلی کامپایلر
روند کلی کار کامپایلرها به این شکل است که برنامه سطح بالا را خوانده و یک شکل میانی از آن ایجاد میکند و سرانجام آن را به زبان دیگری مانند اسمبلی تبدیل میکند، سپس زبان اسمبلی نیز به شکل میانی برنامه ایجاد و سرانجام به کد ماشین تبدیل میشود. کامپایلر این کد را در قالب Memory Word که بر اساس قواعد زبان سطح بالا نوشته بود، برای سختافزار ایجاد میکند.
مفسر چیست؟
مفسر یک برنامه کامپیوتری است که دستورهای نوشتهشده در یک زبان برنامهنویسی سطح بالا را به شکل یک کد قابلفهم برای ماشین اجرا میکند.
بزرگترین مزیتی که مفسر دارد این است که برنامه نوشتهشده اصلی، وابسته به نوع سختافزار نیست. یعنی برنامهای که به زبان مفسر نوشته شود میتواند بر روی هر نوع سیستمعاملی اجرا شود.
تفاوت مفسر و کامپایلر
۱- چگونگی اجرا شدن
در زبانهای کامپایلری ابتدا یکبار کدها به صورت کامل ترجمه میگردند. سپس برنامه برای اجرا از روی فایل کامپایل شده اجرا میگردد. اما در زبانهای مفسری کدها به صورت خط به خط تفسیر و اجرا میشوند. سپس هر دفعه که بخواهیم برنامه را دوباره اجرا کنیم به همین صورت کد تفسیر و اجرا میشود.
۲- وابسته بودن یا نبودن به سیستم عامل
یکی دیگر از تفاوتهای این زبانها این میباشد که زبان مفسری برای اجرا نیاز به یک نرمافزار مفسر یا interpreter دارد. اما زبان کامپایلری تنها یکبار کامپایل شده و کدهای قابل اجرا در ماشین را ایجاد میکند. از آن پس بر روی هر سیستمی بدون نیاز به کامپایلر قابل اجرا میباشد.
اما همین نکته این تفاوت را ایجاد میکند که زبان کامپایلر وابسته به سیستمعامل است، یعنی در صورتی اجرا خواهد شد که در آن سیستمعامل کامپایل شده باشد و در سیستمعاملهای دیگر اجرا نخواهد شد. اما زبان مفسر در هر سیستمعاملی که نرمافزار مفسر آن وجود داشته باشد اجرا و تفسیر میگردد. در واقع زبان مفسر وابسته به سیستمعامل نیست.
۳- سرعت و میزان استفاده از حافظه و پردازنده
زبان های Interpreter کدها را به صورت خط به خط تفسیر و اجرا میکنند، این کار باعث میشود تا مقدار زیادی از CPU و RAM کامپیوتر اشغال شود و مشخص است که سرعت پایینتری نیز خواهند داشت. اما کامپایل شدن یکبارهی زبانهای کامپایلر این است که در اجراهای متعدد سبکتر بوده و سرعت بهتری خواهند داشت.
۴- خطایابی
همین مزیتِ به صورتِ یکجا کامپایل شدن زبانهای کامپایلر در بخش خطایابی و رفع مشکل، نقص بهحساب میآید. زیرا در زبانهای مفسر هنگامیکه برنامه خط به خط اجرا میشود، در هر بخشی از برنامه که مشکلی وجود داشته باشد، قابل پیدا کردن و رفع میباشد. اما در زبانهای Compiler برای رفع یک مشکل در کدها میبایست سورس خود برنامه را مجدد بازیابی کرده، سپس خطا را پیدا و تصحیح کرد که این کار بسیار دشوارتر از کار با زبانهای مفسری است.
معرفی زبانهای مفسری و کامپایلری
از معروفترین زبانهای مفسری میتوانیم به زبانهای BASIC ،MATLAB ،Perl ،PHP ،Python ،Ruby و جاوا اسکریپت اشاره کنیم. همچنین معروفترین زبانهای کامپایلری زبانهای C++ ،C# ،Pascal، جاوا و … هستند.
بله یک سری زبانها مثل جاوا هم از interpreter و هم کامپایلر استفاده میکنن. در این زبان اول کدها توسط کامپایلر به بایت کد و بایت کدها توسط مفسرها به کدهای ماشین تبدیل میشن.
پس درحقیقت میشه گفت تفاوت اصلیش در این هست که در زبان های تفسیری هر دفه تمام کد ها اجرا میشه ولی در کامپایلری کدها اجرا شده و هر دفه کد های اجرا شده (در ویندوز میشه .exe ) دوباره اجرا میشه ؟، چون تمام ویژگی ها تقریبا یکیه ینی وقتی تو C هم کامپایل میکنیم اونجا هم خط به خط داره میره جلو ولی موضوع بر سر اخر کار هست ایا این برداشت درسته ؟
سلام امین جان در زبانهای مفسری، در هربار اجرا کدهای سورس شما بصورت خط به خط اجرا خواهند شد. در زبانهای کامپایلری، در هربار اجرا کدهای کامپایل شده (یعنی کدهایی که به زبان ماشین نزدیک است مثل زبان اسمبلی) اجرا خواهند شد. موفق باشید
جاوا زبان مفسری است . و کامپایل نمیکنه چون مجازی ساز مثل هات اسپات فقط برای سرعت بیشتر آن است.
در نظرات بالا راجع به جاوا بحث شد. برای اطلاعات بیشتر میتونید به این لینک مراجعه کنید.
ببخشید زبان هایی که از ترکیب دو ترجمه استفاده می کنند به چه صورته؟
بله یک سری زبانها مثل جاوا هم از interpreter و هم کامپایلر استفاده میکنن. در این زبان اول کدها توسط کامپایلر به بایت کد و بایت کدها توسط مفسرها به کدهای ماشین تبدیل میشن.
واقعا ممنونم از مطالبتون. خیلی عالی و خیلی اموزنده.
ممنون از همراهی شما
بسیار عالی بود ممنون
سپاس
پس درحقیقت میشه گفت تفاوت اصلیش در این هست که در زبان های تفسیری هر دفه تمام کد ها اجرا میشه ولی در کامپایلری کدها اجرا شده و هر دفه کد های اجرا شده (در ویندوز میشه .exe ) دوباره اجرا میشه ؟، چون تمام ویژگی ها تقریبا یکیه ینی وقتی تو C هم کامپایل میکنیم اونجا هم خط به خط داره میره جلو ولی موضوع بر سر اخر کار هست ایا این برداشت درسته ؟
سلام امین جان
در زبانهای مفسری، در هربار اجرا کدهای سورس شما بصورت خط به خط اجرا خواهند شد.
در زبانهای کامپایلری، در هربار اجرا کدهای کامپایل شده (یعنی کدهایی که به زبان ماشین نزدیک است مثل زبان اسمبلی) اجرا خواهند شد.
موفق باشید
بسیار عالی♡
فقط ای کاش مثال هم میزدید
آیا مسفر برای اجرا وابسته به سیستم عامل هست؟
سلام وقت بخیر
خیر برای اجرا نه. ولی برای نصب مفسر باید دقت کنید که مفسر متناسب با سیستم عامل خودتون دانلود و نصب کنید
موفق باشید
مختصر و مفید
مرسی
بسیار عالی و اموزنده