NO. 0209
برنامه‌نویسی و طراحی وب مفاهیم پایه برنامه‌نویسی

مفسر

Interpreter

مفسر برنامه‌ای است که کد را خط‌به‌خط و هم‌زمان با اجرا ترجمه و اجرا می‌کند. برخلاف کامپایلر، فایل اجرایی مستقلی نمی‌سازد؛ برای هر بار اجرا، خودِ مفسر باید حاضر باشد.

چطور کار می‌کند؟

مفسر مثل مترجم همزمان عمل می‌کند: هر جمله را می‌شنود، ترجمه می‌کند و بلافاصله می‌گوید. کامپایلر در مقابل، مثل مترجمی است که کل کتاب را ترجمه و منتشر می‌کند.

چرخهٔ کار مفسر برای هر خط:

  1. خط را می‌خواند.
  2. آن را تحلیل می‌کند.
  3. معادل قابل اجرا را تولید و بلافاصله اجرا می‌کند.
  4. به خط بعدی می‌رود.

پیامد مهم این ساختار: خطاها فقط وقتی کشف می‌شوند که به آن خط برسیم. اگر خطایی در شرطی باشد که هرگز برقرار نمی‌شود، برنامه ممکن است ماه‌ها بدون مشکل کار کند و ناگهان روزی که آن شرط برقرار شود، خطا بدهد.

پیامد عملی مهم

در زبان‌های مفسری، نوشتن آزمون خودکار اهمیت به‌مراتب بیشتری دارد. چون کامپایلری وجود ندارد که پیش از اجرا خطاها را بگیرد، آزمون‌ها تنها شبکهٔ ایمنی شما هستند.

مقایسه با کامپایلر

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

چرا مفسر کندتر است؟ چون کار ترجمه در هر بار اجرا تکرار می‌شود. اگر خطی داخل حلقه‌ای یک میلیون بار اجرا شود، مفسر باید یک میلیون بار آن را تحلیل کند — در حالی که کامپایلر یک بار برای همیشه ترجمه کرده است.

مزیت بزرگ: چرخهٔ سریع

با وجود کندی اجرا، زبان‌های مفسری در بسیاری از حوزه‌ها غالب‌اند. دلیلش یک مبادلهٔ اقتصادی است: زمان برنامه‌نویس گران‌تر از زمان پردازنده است.

مزایای عملی:

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

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

مرزهای محوشده

تقسیم‌بندی قاطع «زبان کامپایلی» و «زبان مفسری» امروز چندان دقیق نیست. دلایل:

  • خود زبان کامپایلی یا مفسری نیست؛ پیاده‌سازی آن است. برای یک زبان واحد می‌توان هم کامپایلر نوشت و هم مفسر.
  • کامپایل درجا. بسیاری از محیط‌های اجرایی مدرن، بخش‌های پرتکرار کد را در حین اجرا به کد ماشین ترجمه می‌کنند تا سرعت را به کامپایلر نزدیک کنند.
  • مرحلهٔ میانی. برخی زبان‌ها ابتدا به بایت‌کد کامپایل می‌شوند و سپس آن بایت‌کد تفسیر یا اجرا می‌شود — یعنی ترکیبی از هر دو.

نتیجهٔ عملی: به‌جای پرسیدن «این زبان کامپایلی است یا مفسری؟»، بهتر است بپرسید «این پیاده‌سازی چه مبادله‌ای میان سرعت اجرا، سرعت توسعه و قابلیت حمل انتخاب کرده است؟»

پرسش‌های متداول دربارهٔ مفسر

کدام بهتر است، مفسر یا کامپایلر؟

هیچ‌کدام مطلقاً بهتر نیستند. اگر سرعت اجرا حیاتی است — بازی، سیستم‌عامل، پردازش سنگین — کامپایلر مناسب‌تر است. اگر سرعت توسعه و انعطاف مهم‌تر است — اسکریپت، تحلیل داده، نمونه‌سازی — مفسر بهتر جواب می‌دهد.

آیا زبان‌های مفسری برای پروژه‌های بزرگ مناسب‌اند؟

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

چرا کد جاوااسکریپت در مرورگر قابل دیدن است؟

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