مفسر در برنامه نویسی چیست؟ — Interpreter به زبان ساده
برنامه نویسی دارای بخشهای بسیاری است که افراد در روند پیادهسازی برنامه با آنها رو به رو میشوند. مفسر (Interpreter) یکی از این بخشها به شمار میرود. مفسر نرم افزاری برای پیادهسازی مستقیم دستورالعملهای برنامه است که در بسیاری از زبانهای برنامه نویسی سطح بالا (نزدیک به زبان انسان) مورد استفاده قرار میگیرد. انجام وظیفه مفسر برای پیادهسازی و اجرای کدهای برنامه ضروری است. در این نوشتار به این سوال پاسخ داده شده است که مفسر در برنامه نویسی چیست و سایر نکات و مباحث مهم پیرامون مفهوم مفسر و تفاوت آن با «کامپایلر» (Compiler) و دیگر نرم افزارهای مشابه شرح داده شدهاند.
مفسر در برنامه نویسی چیست ؟
مفسر یک نرم افزار کامپیوتری است که هر «عبارت» (گزاره | Statement) یا همان «خط کد» برنامه زبانهای سطح بالا را به کدهای قابل خواندن برای ماشین تبدیل میکند. این کدها شامل «کدهای منبع» (Source Code)، کدهای از قبل کامپایل شده و اسکریپتها میشوند. «کامپایلر» و مفسر هر دو هدف مشترکی دارند و آن هم تبدیل برنامههای نوشته شده با زبانهای سطح بالا به کدهای ماشین است. مفسر یا همان Interpreter کدهای زبان سطح بالا را به زبانی میانی تبدیل میکند. همچنین این نرم افزار میتواند کدهای منبع سطح بالا را تجزیه کند و سپس دستورات را به طور مستقیم انجام دهد، در این حالت دستورات خط به خط یا عبارت به عبارت اجرا میشوند.
انسانها فقط زبانهای سطح بالا را درک میکنند، به کدهای این زبانها، کدهای منبع گفته میشود. از طرف دیگر، کامپیوترها تنها برنامههای نوشته شده توسط زبانهای دودویی یا باینری را متوجه میشوند. به همین دلیل در برنامه نویسی به یک کامپایلر یا مفسر نیاز است که کدهای سطح بالا را به کدهای سطح پایین تبدیل کند. زبانهای برنامه نویسی با دو روش کامپایلری یا تفسیری پیادهسازی میشوند. همانطور که از نام کلمه مفسر مشخص است، این نرم افزار کدهای سطح بالا را به کدهایی تفسیر یا تبدیل میکند که برای ماشین قابل درک باشند یا آنها را به کدهای زبان میانی تبدیل یا تفسیر میکند که به راحتی پیادهسازی شوند.
مفسر هر گزاره یا همان عبارت از کدها را میخواند و سپس آنها را به طور مستقیم پیادهسازی میکند. «اسمبلر» (Assembler) یا کامپایلر کدهای منبع سطح بالا را به کدهای محلی یا کامپایل شدهای تبدیل میکنند که به طور مستقیم توسط سیستم عاملها با ایجاد فایل برنامه با پسوند.exe پیادهسازی میشوند. کامپایلرها و مفسر در برنامه نویسی دارای مزایا و معایب مختلفی هستند. بیشتر اوقات میتوان از آنها به جای یکدیگر استفاده کرد زیرا اکثر محیطهای توسعه یکپارچه هم از مفسر و هم از کامپایلر برای زبانهای برنامه نویسی سطح بالا استفاده میکنند.
کامپایلرها باید «کدهای شی» (Object Code) میانی تولید کنند که برای اتصال نیازمند فضای حافظه بیشتری هستند، در مقابل مفسرها از حافظه به طور موًثرتر و بهینهتر استفاده میکنند. از آنجایی که مفسر، کدها را در یک پردازش تکی کوچک میخواند و سپس پیادهسازی میکند، برای اسکریپت نویسی و برنامههای کوچک دیگر بسیار مفید است. به همین دلیل، این نرم افزار معمولاً روی سرورهای وب نصب میشود تا اسکریپتهای قابل اجرا آنها را پیادهسازی کند. همچنین در مرحله توسعه برخی از برنامهها که نیاز به پیادهسازی بخشهای کوچکی از کدها وجود دارد، از مفسر استفاده میشود و به جای کامپایل کردن کل برنامه، هر بار یکی از بخشهای برنامه به صورت یک به یک پیادهسازی خواهند شد.
با استفاده از مفسر، هر عبارت کدهای منبع به صورت خط به خط پیادهسازی میشوند و این روش برای اشکالزدایی و بررسی دلیلهای ایجاد خطا بسیار کاربردی است. همچنین مفسرها برای هدفهای آموزشی نیز مورد استفاده قرار میگیرند؛ زیرا با استفاده از آنها میتوان نحوه برنامه نویسی یک عبارت را به دانشجو آموزش داد. در بخش بعدی از این مقاله به شرح و بررسی «مترجم» (Translator) در برنامه نویسی پرداخته شده است.
Translator در برنامه نویسی چیست؟
کلیترین اصطلاحی که میتوان برای ابزارهای نرم افزاری تبدیل کدها در نظر گرفت، نرم افزار Translator یا همان مترجم است. Translator یک اصطلاح عمومی است که میتواند به یک مفسر، کامپایلر یا اسمبلر اشاره کند. مترجم میتواند هر ابزاری باشد که کدهای سطح بالا را به کدهای سطح بالای دیگر یا به کدهای سطح پایینتر تبدیل کند. در ادامه مقاله «مفسر در برنامه نویسی چیست» به علت عملکرد کندتر مفسر در برنامه نویسی نسبت به نرم افزارهای مشابه آن مانند کامپایلر پرداخته شده است.
چرا مفسر در برنامه نویسی کندتر از بقیه نرم افزارهای مشابه است؟
در بیشتر موارد، برای هدف تبدیل کدهای سطح بالا به کدهای ماشین از کامپایلر استفاده میشود، زیرا رویکردی که برای پیادهسازی عملیات تبدیل در کامپایلر مورد استفاده قرار میگیرد در مقایسه با تفسیر خط به خطی که در مفسر انجام میشود سریعتر است. مفسر به جای ترجمه کلی کدها و تبدیل آنها به کدهای قابل درک برای ماشین، آنها را به صورت خط به خط تفسیر و ترجمه میکند و این موضوع زمان بیشتری میگیرد.
اگر حجم کدهای منبع زیاد باشد، زمان اجرا برای یک مفسر نسبتاً کندتر از کامپایلر خواهد بود. اما در مفسر به دلیل اینکه تفسیر در هر خط یا عبارت انجام میشود، میتوان آن را در میانه پیادهسازی متوقف کرد تا امکان اصلاح یا اشکلزدایی کدها وجود داشته باشد. در بخش بعدی از مقاله «مفسر در برنامه نویسی چیست» به بررسی نقش مفسر در برنامههای نوشته شده پرداخته شده است.
نقش مفسر در برنامه نویسی چیست ؟
مفسر در برنامه نویسی دارای نقشهای مهمی است که در ادامه این بخش به برخی از آنها اشاره میشود:
- مفسر کدهای منبع را خط به خط در «زمان اجرا» (Runtime) به کدهای ماشین تبدیل میکند و سپس پیادهسازی کدها را انجام میدهد.
- مفسر یک برنامه نوشته شده به زبان سطح بالا را به طور کامل به زبانی در سطح ماشین تبدیل میکند.
- مفسر امکان محاسبه و اصلاح برنامه را در زمان اجرا فراهم میکند.
- با استفاده از مفسر نسبتاً زمان کمتری برای تجزیه و تحلیل و همچنین پردازش برنامه صرف میشود.
- اجرای برنامه با مفسر در مقایسه با کامپایلر نسبتاً کندتر است.
بخش بعدی از مقاله «مفسر در برنامه نویسی چیست» پس از معرفی مجموعه دورههای آموزش برنامه نویسی فرادرس به بررسی انواع گوناگون مفسرها در برنامه نویسی اختصاص داده شده است.
معرفی فیلم های آموزش برنامه نویسی فرادرس
دورههای وب سایت آموزشی فرادرس بر اساس موضوع به صورت مجموعههای آموزشی مختلفی دستهبندی میشوند. یکی از این مجموعههای جامع مربوط به آموزشهای انواع زبانهای برنامه نویسی گوناگون است. علاقهمندان و دانشجویان میتوانند برای یادگیری بیشتر مفاهیم مختلف برنامه نویسی و همچنین زبانهای برنامه نویسی گوناگون مفسری یا کامپایلری، از دورههای ارائه شده در این مجموعه آموزشی استفاده کنند. در زمان تدوین این مقاله، مجموعه دورههای برنامه نویسی فرادرس حاوی بیش از ۵۰۰ ساعت محتوای ویدیویی و حدود ۶۲ عنوان آموزشی متفاوت است. در ادامه، برخی از دورههای این مجموعه به طور خلاصه معرفی شدهاند:
- فیلم آموزش برنامه نویسی پایتون Python – مقدماتی (طول مدت: ۱۹ ساعت و ۵۳ دقیقه، مدرس: پژمان اقبالی شمس آبادی): در این دوره آموزشی فرادرس، زبان برنامه نویسی پایتون از پایهترین مفاهیم تا اصول پیشرفته آن آموزش داده میشود و سعی شده است که همه مباحث مقدماتی مورد نیاز آن ارائه شود. برای مشاهده فیلم آموزش برنامه نویسی پایتون Python – مقدماتی + کلیک کنید.
- فیلم آموزش برنامه نویسی C++ سی پلاس پلاس (طول مدت: ۲۰ ساعت و ۱۴ دقیقه، مدرس: دکتر فرشید شیرافکن): در این فرادرس، زبان برنامه نویسیC++ در دو بخش آموزش داده شده است. برای مشاهده فیلم آموزش برنامه نویسی C++ سی پلاس پلاس + کلیک کنید.
- فیلم آموزش برنامه نویسی جاوا Java (طول مدت: 19 ساعت و 19 دقیقه، مدرس: دکتر سید مصطفی کلامی هریس): این دوره آموزشی به دانشجویان و علاقهمندانی پیشنهاد میشود که قصد یادگیری زبان برنامه نویسی جاوا را به صورت جامع دارند. برای مشاهده فیلم آموزش برنامه نویسی جاوا Java + کلیک کنید.
- فیلم آموزش برنامه نویسی C (طول مدت: ۱۳ ساعت و ۳۰ دقیقه، مدرس: دکتر سید مصطفی کلامی هریس): در این فرادرس، زبان برنامه نویسی C همراه با مفاهیم کاربردی آن به همراه مثالهای عملی آموزش داده شده است. برای مشاهده فیلم آموزش برنامه نویسی C + کلیک کنید.
- فیلم آموزش کاربردی برنامه نویسی سی شارپ #C (طول مدت: ۱۳ ساعت و ۵۸ دقیقه، مدرس: مهندس رشید شجاعی): در این دوره آموزشی، آموزندگان به صورت کاربردی و عملی با زبان سی شارپ و محیطهای Visual Studio و داتنت آشنا میشوند. برای مشاهده فیلم آموزش کاربردی برنامه نویسی سی شارپ #C + کلیک کنید.
- فیلم آموزش برنامه نویسی تایپ اسکریپت TypeScript (طول مدت: ۸ ساعت و ۴۵ دقیقه، مدرس: پوریا کهریزی): این دوره آموزشی به علاقهمندانی پیشنهاد شده است که قصد یادگیری زبان برنامه نویسی تایپ اسکریپت را از پایهترین مفاهیم آن دارند. تایپ اسکریپت دارای شباهتهای بسیاری با زبانهای سی شارپ و جاوا اسکریپت است. برای مشاهده فیلم آموزش برنامه نویسی تایپ اسکریپت TypeScript + کلیک کنید.
در ادامه مقاله «مفسر در برنامه نویسی چیست» و پس از معرفی مختصر برخی از دورههای آموزشی برنامه نویسی فرادرس، در بخش بعدی مقاله به بررسی انواع گوناگون مفسر در برنامه نویسی پرداخته میشود.
انواع مفسر در برنامه نویسی چیست ؟
مفسرها در زبانهای برنامه نویسی دارای انواع گوناگونی هستند که در این بخش به شرح و معرفی آنها پرداخته میشود. این انواع مفسرها در ادامه فهرست شدهاند:
- «مفسر بایت کد» (Bytecode Interpreter)
- «مفسر کدهای نخبندی شده» (Threaded Code Interpreter)
- «مفسر درخت نحوی انتزاعی» (Abstract Syntax Tree Interpreter)
- «مفسر خود تفسیری» (Self Interpreter)
در ادامه این بخش به بررسی و شرح هر یک از انواع مفسر در برنامه نویسی پرداخته شده است. ابتدا مفسر بایت کد مورد بررسی قرار میگیرد.
مفسر بایت کد چیست ؟
این نوع از مفسرها ابتدا کدهای منبع را به بایت کد تبدیل میکنند. بایت کد نمایشی فشرده و بهینهسازی شده از کدهای منبع است، اما نمایشی از کدهای ماشین نیست. سپس مفسرهای بایت کد، این کدهای پیادهسازی شده را تفسیر میکنند. به این نوع از مفسرها که هم از کامپایل و هم از تفسیر استفاده میکنند، «Compreter» نیز گفته میشود. این کلمه ترکیب کلمات Compiler و Interpreter است. اجرای هر دستورالعمل با یک بایت شروع خواهد شد، بنابراین این مفسرها دارای حداکثر ۲۵۶ بایت هستند. در بخش بعدی از این مقاله به بررسی مفسر کدهای نخبندی شده پرداخته شده است.
مفسر کدهای نخ بندی شده چیست ؟
مفسر کدهای نخبندی شده یا دارای نخ، بسیار شبیه مفسر بایت کد است، با این تفاوت که از «اشارهگر» (Pointer) در روند کار آنها استفاده میشود. در این نوع مفسر، هر دستورالعمل یک کلمه است که به عنوان اشارهگر عمل میکند و این اشارهگر به دنباله دستورالعملها یا تابعها اشاره خواهد کرد. در این روش از تفسیر، هیچ محدودیتی برای تعداد دستورالعملها وجود ندارد، یعنی با توجه به دستوالعملها حافظه و فضای آدرس در دسترس است. بخش بعدی از مقاله «مفسر در برنامه نویسی چیست» به شرح و بررسی مفسر درخت نحوی انتزاعی اختصاص دارد.
مفسر درخت نحوی انتزاعی چیست ؟
این مفسر، کدهای منبع را به یک «درخت نحوی انتزاعی» (Abstract Syntax Interpreter | AST) تبدیل میکند. سپس مفسر درخت نحوی انتزاعی طبق این درخت برنامه را اجرا میکند. هر عبارت فقط یک بار تجزیه میشود. ساختمان برنامه و ارتباط بین عبارتها در این نوع تفسیر یکسان هستند. مفسر درخت نحوی انتزاعی تجزیه و تحلیلهای خوبی را در طول زمان اجرا فراهم میکند. در بخش بعدی به شرح و معرفی مفسر خود تفسیری پرداخته شده است.
مفسر خود تفسیری چیست ؟
مفسر خود تفسیری نوع خاصی از مفسرها به حساب میآید. مفسر این نوع از برنامههای نوشته شده با همان زبان برنامه نویسی برنامه نوشته شده است. به عنوان مثال میتوان به مفسر « BASIC» اشاره کرد که با استفاده از همین زبان نوشته شده است. مفسرهای خود تفسیری زمانی ایجاد میشوند که کامپایلری برای زبان برنامه نویسی وجود نداشته باشد. ایجاد این زبانها نیازمند اجرای آن در یک زبان «میزبان» (Host) است، این زبان میزبان میتواند یک زبان برنامه نویسی دیگر باشد. در ادامه مقاله «مفسر در برنامه نویسی چیست» به بررسی تفاوتها و شباهتهای کامپایلر و مفسر در برنامه نویسی پرداخته شده است.
تفاوت ها و شباهت های کامپایلر و مفسر در برنامه نویسی چیست ؟
مفسر و کامپایلر دارای یک شباهت اصلی هستند و آن هم هدف آنها برای تبدیل کدهای نوشته شده توسط انسان به کدهایی است که کامپیوتر بتواند آنها را بخواند و پیادهسازی کند. اما این نرم افزارها هر کدام با روشهای متفاوتی این هدف را دنبال میکنند. تفاوت کلی مفسر و کامپایلر در این است که کامپایلرها کدهای سطح بالا را قبل از پیادهسازی به طور کل به کدهای ماشین تبدیل میکنند و یک فایل.exe برای آن میسازند. اما مفسر کدهای سطح بالا را هنگام پیادهسازی برنامه به کدهای قابل فهم برای ماشین تبدیل میکند. در ادامه به بررسی برخی از تفاوتهای مهم میان مفسر و کامپایلر پرداخته شده است.
تفاوت مفسر و کامپایلر بر اساس مراحل انجام کار آن ها
در کامپایلرها ابتدا یک برنامه نوسط برنامه نویس ایجاد میشود، سپس کامپایلر همه عبارتهای زبان برنامه نویسی را برای بررسی صحت آن تجزیه و تحلیل میکند و اگر نادرست باشد، خطا میدهد. در مرحله بعد، اگر خطایی در برنامه وجود نداشته باشد، کامپایلر کدهای منبع را به کدهای ماشین تبدیل میکند. در این روش فایل کدهای ایجاد شده برای کامپایل به برنامه قابل اجرایی با پسوند.exe تبدیل میشود و در نهاست در مرحله آخر برنامه پیادهسازی خواهد شد. اما در مفسرها بعد از ایجاد برنامه توسط برنامه نویس، هیچ فایل اتصال یا کدهای ماشینی تولید نمیشود و عبارتهای منبع به صورت خط به خط در حین پیادهسازی اجرا میشوند.
تفاوت مفسر و کامپایلر بر اساس کدهای ماشین
در روش استفاده از کامپایلر، کدهای ماشین با زبان ماشین روی حافظه دیسک ذخیره میشوند. اما برخلاف این روش، در رویکرد استفاده از مفسر هیچ کد ماشینی در هیچ جایی ذخیره نمیشود؛ زیرا کدها در این روش به صورت خط به خط پیادهسازی خواهند شد.
تفاوت مفسر و کامپایلر در زمان اجرا
در کدها و زبانهایی که از کامپایلر استفاده میکنند، در زمان کامپایل کدها با سرعت بیشتری پیادهسازی میشوند. اما زمانی که در یک برنامه از مفسر استفاده شده است، این نرم افزار پیادهسازی کدها را کندتر از کامپایلر انجام میدهد، زیرا باید خط به خط پیش برود و این موضوع زمان بیشتری از آن میگیرد. در صورتی که کامپایلر همه کدها را به صورت یکجا پیادهسازی میکند.
تفاوت مفسر و کامپایلر بر اساس مدل آن ها
کامپایلر بر اساس روشهای «بارگذاری و اتصال» (Linking and Loading) ترجمه زبان را انجام میدهد. بارگذاری و اتصال در برنامهها، نقش مهمی را برای پیادهسازی آنها انجام میدهند. اتصال کدهای شی تولید شده توسط اسمبلر را دریافت و آنها را برای تولید ماژول پیادهسازی ترکیب میکند. در سمتی دیگر، روش بارگذاری، ماژول اجرایی را برای اجرا در حافظه اصلی بارگذاری میکند. اما مفسر بر اساس «متُد» (Method) تفسیر را انجام میدهد و با استفاده از آن هر زبان برنامه نویسی با متد مخصوص به خود خطهای برنامه را تفسیر میکند.
تفاوت مفسر و کامپایلر در روش تولید برنامه چیست؟
کامپایلر یک برنامه خروجی مستقل با پسوند.exe تولید میکند که همچنین میتواند به طور مستقل از برنامه اصلی نیز پیادهسازی شود. ولی مفسر هیچ برنامه خروجی تولید نمیکند. در این روش کدهای منبع ماشین هر بار و هنگام پیادهسازی کدهای اصلی محاسبه میشوند.
تشکر