| اجرای برنامه |
| --- |
| 
مفاهیم عمومی |
| * کد
* ترجمه
	+ کامپایلر
		- زمان کامپایل
	+ کامپایلر بهینه‌ساز
* نمایش میانی (IR)
* اجرا
	+ سیستم زمان اجرا
		- زمان اجرا
	+ اجراپذیر
	+ مفسر
	+ ماشین مجازی
 |
| 
انواع کد |
| * کد منبع
* آبجکت کد
* بایت‌کد
* کد ماشین
* ریزبرنامه‌سازی
 |
| 
راهبردهای کامپایل |
| * درجا (JIT)
	+ ردیابی درجا
* جلوتر از زمان (AOT)
* تراکامپایل
* کامپایل مجدد
 |
| 
زمان اجرای قابل ذکر |
| * زمان اجرای اندروید (ART)
* زمان اجرای زبان مشترک (CLR) & مونو
* crt0
* ماشین مجازی هیپ‌هاپ
* ماشین مجازی جاوا (JVM)
* آبجکتیو-سی
* وی۸
	+ نود.جی‌اس
* پای‌پای
* موتور زند
 |
| 
کامپایلرها و زنجیرابزارهای قابل ذکر |
| * کلکسیون کامپایلرهای گنو (GCC)
* ال‌ال‌وی‌ام
	+ کلنگ
 |
| * ن
* ب
* و
 |

نمونه ای از نمودار کلاس و شی برای الگوی طراحی مترجم.
یک **مُفَسِر**، یا **تَفسیر کننده** (به انگلیسی: Interpreter) در علوم رایانه، یک برنامهٔ رایانه‌ای است که دستورهای نوشته شده در یک زبان برنامه نویسی را اجرا می‌کند. با وجود اینکه تفسیر کردن و ترجمه کردن، دو وسیلهٔ اصلی هستند که از طریق آن‌ها زبان‌های برنامه‌نویسی اجرا می‌شوند، دو مقولهٔ کاملاً مجزا نیستند. یکی از دلایل این است که اغلب سیستم‌های مفسر برخی از کارهای ترجمه را انجام می‌دهند. یک مفسر می‌تواند برنامه‌ای باشد که:

1. تجزیه‌کننده مستقیماً کد منبع را اجرا می‌کند.
2. کد منبع را به یک رابط میانجی مناسب (کد) تبدیل می‌کند و بلافاصله آن را اجرا می‌کند.
3. از آن کمک گرفته می‌شود تا کدهای آماده به اجرایی که توسط مترجم که قسمتی از سیستم مفسر است ساخته‌شده را اجرا کند.

پرل، پایتون، روبی، متلب و پی اچ پی جزو زبان‌های برنامه‌نویسی، از نوع ۲ هستند، در حالی که پاسکال و ماشین مجازی جاوا نوع ۳ هستند. برنامه‌های نوشته شده با جاوا از قبل ترجمه شده و به عنوان کدهای مستقل از ماشین، ذخیره می‌شوند و بعد در زمان اجرا توسط یک مفسر (ماشین مجازی) اجرا می‌شوند. برخی سیستم‌ها، مانند اسمال تاک و غیره ممکن است ترکیبی از نوع ۲ و ۳ باشند. لفظ‌های زبان مفسر و زبان مترجم صرفاً به این معنا هستند که اساس پیاده‌سازی یک زبان برنامه‌نویسی یک مفسر است یا یک مترجم؛ یک زبان سطح بالا زبانی است که مستقل از پیاده‌سازی مشخصی است.

کارایی
------

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

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

سازش‌های زیادی بین سرعت تولید به هنگام استفاده از مفسر و سرعت اجرا به هنگام استفاده از مترجم وجود دارد. برخی سیستم‌ها (برای مثال، ال آی اس پی) به کدهای ترجمه شده و تفسیر شده اجازه می‌دهند تا یکدیگر را فراخوانی کنند و متغیرهایشان را به اشتراک بگذارند. به این معنا که هنگامی که یک روال تحت یک مفسر مورد تست قرار گرفت و اشکال‌زدایی شد، می‌تواند ترجمه شود و بنابراین، در حین اینکه روال‌های دیگر در حال تولید شدن هستند، اجرای سریعتری داشته باشد. تعداد زیادی از مترجم‌ها کد منبع را همان گونه که هست اجرا نمی‌کنند بلکه آن را به نوع فشرده تر داخلی تبدیل می‌کنند. برای مثال، برخی از مفسرهای ابتدایی، کلمات کلیدی را با نشانه‌های تک بایتی -که می‌توانند برای یافتن دستورالعمل‌ها در یک میز جامپ استفاده شوند- جایگزین می‌کنند. یک مفسر ممکن است از همان نوع تحلیل گر واژگانی و تجزیه‌کننده ای استفاده کند که مترجم از آن استفاده می‌کند و سپس درخت انتزاعی ترکیب را تفسیر کند.

مفسرهای بایت کد
---------------

طیفی از احتمالات بین تفسیر کردن و ترجمه کردن وجود دارد که به مقدار تحلیل انجام شده قبل از اجرای برنامه بستگی دارد. برای مثال، ایماکس لیسپ به بایت کد -که نمایندهٔ بسیار بهینه شده و فشرده شده‌ای از منبع لیسپ است، ولی کد ماشین نیست (و در نتیجه وابسته به سخت‌افزار مشخصی نیست) -ترجمه می‌شود. این کد «ترجمه شده» بعداً توسط یک مفسر بایت کد -که خود آن توسط زبان سی نوشته شده‌است- تفسیر می‌شود. کد ترجمه شده در این حالت، یک کد ماشین برای یک ماشین مجازی است، که در سخت‌افزار پیاده‌سازی نشده و در مفسر بایت کد پیاده‌سازی شده‌است. همین شیوه در کد فورت -که در سیستم‌های میان افزار باز استفاده می‌شود- به کار برده می‌شود: زبان منبع به «اف کد» (یک بایت کد) ترجمه می‌شود، که بعداً توسط یک ماشین مجازی تفسیر می‌شود.

---

نویسنده:vvعلی اکبر خلیلیvv

---

بایت کد به زبان ساده یعنی هر خط از برنامه نوشته شده کاربر برای مفسر شامل یک یا چند دستور است ، که باید به اعداد با طول ثابت تبدیل گردد. در زمان اجرا توسط مفسر خواندن و اجرای این بایت کدها سریع می باشد.
مثال:این دستور یک مثال واقعی نیست.
print ("hello word")
با دستور print رشته hello word روی صفحه چاپ می شود.
مرحله(۱):
ابتدا دستور print جدا می‌شود و در متغییر رشته ای text1 قرار می‌گیرد.
سپس رشته hello word جدا می شود و در متغییر رشته text2 قرار می‌گیرد.
مرحله(۲):
دستور داخل text1 و رشته داخل text2 به کد عددی که در مفسر گنجانده شده قرار می‌گیرد و سپس اجرا می‌گردد.
مثال: به زبان c (سی) می باشد.
}struct byte\_code

char text1[20]
char text2[80]
int text1\_byte\_code
bcode\*{
در زمان اجرای مفسر text1 که شامل دستور print است به یک عدد تبدیل می‌شود مثلا عدد ۱
و در text\_byte\_code قرار می‌گیرد.
سپس در زمان اجرا مفسر می گوید اگر عدد داخل ساختار struct مساوی ۱ شد چاپ text2 روی صفحه.
مثال: به زبان c (سی) می باشد.
if(bcode.text1\_byte\_code=1)
}
printf("%s", bcode.text2)

همه دستورها با این 
روش قابل پیاده سازی است.

مفسرهای درخت نحو انتزاعی
------------------------

در طیف بین تفسیر کردن و ترجمه کردن، روش دیگری نیز وجود دارد. در این روش، کد منبع به یک درخت نحو انتزاعی بهینه شده تبدیل می‌شود و سپس به تبعیت از این ساختار درختی، برای اجرای برنامه اقدام می‌شود. در این روش هر عبارت فقط باید یک بار تجزیه شود. به عنوان یک مزیت نسبت به بایت کد، این روش ساختار برنامهٔ سراسری و رابطهٔ بین عبارات را (که در بایت کد از بین می‌رود) حفظ می‌کند و یک نمایش فشرده تر را فراهم می‌سازد؛ بنابراین، درخت انتزاعی ترکیب، به عنوان یک قالب میانی بهتر نسبت به بایت کد برای مترجمهای داخل زمانی پیشنهاد شده‌است. همچنین این روش اجازه می‌دهد، در زمان اجرا تحلیل بهتری انجام گیرد. ثابت شده‌است که یک مفسر جاوا مبتنی بر درخت انتزاعی ترکیب، از یک مفسر مشابه مبتنی بر بایت کد سریع تر است. این سرعت بیشتر به خاطر بهینه‌سازی قویتر است که این بهینه‌سازی به دلیل برخورداری از ساختار کامل برنامهٔ موجود در حین اجرا، به وجود می‌آید.

ترجمه داخل زمانی
----------------

ترجمه داخل زمانی باعث کم شدن فاصله بین مفسرها، مفسرهای بایت کد و مترجم‌ها شده‌است و تکنیکی است که در آن بایت کد در زمان اجرا به شکل کد ماشین بومی ترجمه می‌شود. این برمی گردد به کارایی اجرای کد بومی در سریع کردن زمان بالا آمدن و افزایش استفاده حافظه، هنگامی که در ابتدا بایت کد ترجمه می‌شود. بهینه‌سازی توافقی یک تکنیک ترکیبی ای هست که در آن مفسر، برنامهٔ در حال اجرا را شکل می‌دهد و قسمت‌هایی که بیشتر استفاده شده‌اند را به کد بومی ترجمه می‌کند. هر دو تکنیک بیش از چند دهه سن ندارند، به‌طوری‌که نخستین بار در زبان‌هایی مانند اسمال تاک در ۱۹۸۰ بکار برده شدند.

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

مفسر کارت منگنه
---------------

کلمه «مفسر» اغلب اشاره دارد به قسمتی از واحد ثبت تجهیزات که می‌تواند کارت منگنه را بخواند و علامت‌ها را به صورت فرم قابل خواندن توسط انسان چاپ کند. ای بی ام ۵۵۰ مفسر عددی و ای بی ام ۵۵۷ مفسر الفبایی، نمونه‌هایی از این نوع هستند که به ترتیب در سال‌های ۱۹۳۰ و ۱۹۵۴ ساخته شده‌اند.

پانوشت‌ها
---------

1. ↑  «*مفسّر*» [*رایانه و فنّاوری اطلاعات*] هم‌ارزِ «*interpreter*»؛ منبع: گروه واژه‌گزینی. جواد میرشکاری، ویراستار. *دفتر دوم*. فرهنگ واژه‌های مصوب فرهنگستان. تهران: انتشارات فرهنگستان زبان و ادب فارسی. شابک ۹۶۴-۷۵۳۱-۳۷-۰ (ذیل سرواژهٔ *مفسّر*)
2. ↑  interpreter
3. ↑  compile
4. ↑  source code
5. ↑  efficient intermediate representation
6. ↑  Perl
7. ↑  Python
8. ↑  Ruby
9. ↑  MATLAB
10. ↑  UCSD Pascal
11. ↑  Java virtual machine
12. ↑  run-time
13. ↑  Smalltalk
14. ↑  order
15. ↑  edit-interpret-debug
16. ↑  edit-compile-run-debug
17. ↑  analyze
18. ↑  interpretive overhead
19. ↑  LISPs
20. ↑  jump table
21. ↑  lexical analyzer
22. ↑  parser
23. ↑  abstract syntax tree
24. ↑  spectrum
25. ↑  Emacs Lisp
26. ↑  Bytecode interpreter
27. ↑  Forth
28. ↑  Open Firmware
29. ↑  F code
30. ↑  just-in-time compilation (or JIT)
31. ↑  native
32. ↑  Adaptive optimization
33. ↑  .NET Framework
34. ↑  punched cards
35. ↑  character
36. ↑  IBM ۵۵۷
37. ↑  IBM ۵۵۰

منابع
-----

نسخه انگلیسی

| * ن
* ب
* و
علوم رایانه |
| --- |
| Note: This template roughly follows the 2012 ACM Computing Classification System. |
| سخت‌افزار | 
* برد مدار چاپی
* دستگاه جانبی
* مدار مجتمع
* یکپارچه‌سازی کلان‌مقیاس
* سامانه روی یک تراشه
* رایانش سبز
* خودکارسازی طراحی الکترونیکی
* شتاب‌دهنده سخت‌افزاری

 |
| سازمانسامانه‌های رایانه | 
* معماری رایانه
* سامانه نهفته
* رایانش بی‌درنگ
* اطمینان‌پذیری

 |
| شبکه رایانه‌ای | 
* معماری شبکه
* پروتکل ارتباطات
* سخت‌افزار شبکه
* برنامه‌ریز شبکه
* کارایی شبکه رایانه‌ای
* سرویس شبکه‌ای

 |
| سازمان نرم‌افزار | 
* مفسر
* میان‌افزار
* ماشین مجازی
* سیستم‌عامل
* کیفیت نرم‌افزار

 |
| نظریه زبان‌های برنامه‌نویسیو ابزار توسعه نرم‌افزار | 
* الگو برنامه‌نویسی
* زبان برنامه‌نویسی
* کامپایلر
* زبان خاص دامنه
* زبان مدل‌سازی
* چارچوب نرم‌افزاری
* محیط یکپارچه توسعه نرم‌افزار
* مدیریت پیکربندی نرم‌افزار
* کتابخانه (رایانه)
* مخزن نرم‌افزاری

 |
| توسعه نرم‌افزار | 
* فرایند توسعه نرم‌افزار
* تحلیل نیازمندی‌ها
* طراحی نرم‌افزار
* ساخت نرم‌افزار
* استقرار نرم‌افزار
* تعمیر و نگهداری نرم‌افزار
* تیم برنامه‌نویسی
* نرم‌افزار متن‌باز
* برنامه‌نویسی
* آزمون نرم‌افزار

 |
| نظریه محاسبات | 
* مدل محاسبه
* زبان صوری
* نظریه اتوماتا
* نظریه رایانش‌پذیری
* نظریه پیچیدگی محاسباتی
* منطق در علوم کامپیوتر
* معنی‌شناسی (علوم رایانه)

 |
| الگوریتمها | 
* الگوریتم
* تحلیل الگوریتم‌ها
* کارایی الگوریتمی
* الگوریتم‌های تصادفی
* هندسه محاسباتی

 |
| ریاضیاترایانه | 
* ریاضیات گسسته
* احتمالات
* آمار
* نرم‌افزار ریاضی
* نظریه اطلاعات
* آنالیز ریاضی
* آنالیز عددی

 |
| سامانه اطلاعاتی | 
* پایگاه داده
* ذخیره‌سازی داده رایانه
* سامانه اطلاعات سازمانی
* نرم‌افزار اجتماعی
* سامانه اطلاعات جغرافیایی
* سامانه پشتیبانی تصمیم
* کنترل فرایند
* پایگاه داده چند رسانه‌ای
* داده‌کاوی
* کتابخانه دیجیتال
* سکوی رایانش
* بازاریابی اینترنتی
* وب جهان‌گستر
* بازیابی اطلاعات
* مستندسازی فنی

 |
| امنیت رایانه | 
* رمزنگاری
* روش‌های صوری
* خدمات امنیتی
* سامانه تشخیص نفوذ
* خرابی سخت‌افزار
* امنیت شبکه
* امنیت اطلاعات
* امنیت برنامه

 |
| تعامل انسان و رایانه | 
* طراحی تعاملی
* رایانش اجتماعی
* رایانش فراگیر
* مصورسازی
* دسترس‌پذیری رایانه
* واسط‌های کاربر
* رایانش پوشیدنی

 |
| همروندی | 
* رایانش همزمان
* رایانش موازی
* رایانش توزیع‌شده
* چندریسمانی
* چندپردازشی

 |
| هوش مصنوعی | 
* پردازش زبان‌های طبیعی
* بازنمود دانش
* بینایی رایانه‌ای
* برنامه‌ریزی خودکار
* بهینه‌سازی
* نظریه کنترل
* فلسفه هوش مصنوعی
* هوش مصنوعی توزیع شده
* استدلال خودکار
* زبان‌شناسی رایانشی
* یادگیری ماشین

 |
| یادگیری ماشین | 
* یادگیری با نظارت
* یادگیری بی‌نظارت
* یادگیری تقویتی
* یادگیری چند-وظیفه‌ای
* روش اعتبارسنجی متقابل

 |
| گرافیک رایانه‌ای | 
* پویانمایی رایانه‌ای
* رندرینگ (گرافیک رایانه‌ای)
* روتوش
* واحد پردازش گرافیکی
* واقعیت ترکیبی
* واقعیت مجازی
* فشرده‌سازی تصویر
* مدلسازی جامد

 |
| رایانشکاربردی | 
* تجارت الکترونیک
* نرم‌افزار سازمانی
* ریاضیات محاسباتی
* فیزیک محاسباتی
* شیمی محاسباتی
* زیست‌شناسی محاسباتی
* علوم اجتماعی محاسباتی
* مهندسی و علم محاسبه
* انفورماتیک پزشکی
* هنر دیجیتال
* نشر الکترونیک
* جنگ مجازی
* رأی‌گیری الکترونیکی
* بازی ویدئویی
* واژه‌پرداز
* تحقیق در عملیات
* فناوری آموزشی
* سامانه مدیریت اسناد

 |
| توجه: بنا بر سامانه رده‌بندی رایانش ای‌سی‌ام علم رایانه همچنین می‌تواند به موضوع‌ها یا زمینه‌های گوناگون تقسیم شود.
* **کتاب:علوم رایانه**
* **رده:علوم رایانه**
* **طرح کلی علوم رایانه**
* **ویکی‌پدیا:ویکی‌پروژه علوم رایانه**
* **ویکی‌انبار**
 |