מפרש (תוכנה)

**מפרש** (אנגלית: **Interpreter**) הוא תוכנה המתרגמת קוד מקור של שפת תכנות באופן ישיר ובזמן אמת, שורה אחר שורה, ומבצעת אותה ישירות, פקודה אחר פקודה. בשונה מקומפיילר, המפרש אינו מייצר קובץ בינארי עצמאי, אלא דורש תרגום מחדש של הקוד בכל ריצה. עובדה זו מחייבת שימוש במפרש בכל הרצה של התוכנית (בשונה מקובץ מקומפל), וגורמת לכך שביצוע תוכניות באמצעותו נוטה להיות איטית יותר. יתרון המפרש הוא בזיהוי מיידי של שגיאות במהלך הריצה, אך התוכנית נעצרת עם גילוי השגיאה. בין השפות הנפוצות הפועלות במודל זה ניתן למנות את Python, JavaScript ו-Ruby.
 
שפה שהמימושים הנפוצים שלה הם בעזרת מפרש נקראת "שפה מפורשת" (אם כי טכנית זאת לא תכונה של שפה). דוגמאות נפוצות לשפות כאלה הן: ויז'ואל בייסיק, JavaScript, פייתון, Prolog, TCL ,bash ובעבר גם שפת APL וכן שפת לוגו.

## מפרש לעומת מהדר

כל מחשב הוא מכונה, המסוגלת להריץ תוכניות הכתובות בשפה הייחודית לה. לכן, על מנת להריץ תוכנית מסוימת, הכתובה בשפה שאינה שפת המכונה של המחשב המריץ, ראשית יש לתרגמה לשפה זו. תרגום זה יכול להתבצע פעם אחת (ואז בסיום התרגום נוצר קובץ הכתוב בשפת מכונה, הניתן להרצה בכל עת) כפי שנעשה על ידי מהדר, או לפני כל פעם בה מריצים את התוכנית, כפי שנעשה על ידי מפרש. ההבדל בין השניים, איפוא, הוא מתי מבוצע התרגום. מהבדל זה נגזרים המאפיינים של כל אחד מהם.

## יתרונות וחסרונות

תהליך ההידור הוא תהליך מורכב מאוד, הספציפי למכונה מסוימת. קוד המכונה שנוצר מתחשב בחומרה הספציפית עליה הקוד עתיד לרוץ וכן במערכת ההפעלה המותקנת עליה. כלומר במידה והידרנו תוכנית מסוימת באמצעות מהדר המותאם למכונה מסוימת, התוכנית תרוץ על מכונה זו בלבד. מפרש, לעומת זאת, יאפשר הרצה של התוכנית כמעט בכל מכונה משום שהתוכנית תתורגם על כל מכונה מחדש.

מאידך, ברור כי שימוש במפרש עלול לצרוך משאבים רבים בשל העובדה כי התוכנית מתורגמת כל פעם מחדש. בנוסף, דרישות מסוימות של התוכנית (כמו הקצאת זיכרון) עלולות לקחת יותר זמן בעת שימוש במפרש, לאור העובדה שהתוכנית לא עובדת ישירות מול מערכת ההפעלה, אלא מול המפרש.

לאור הבעייתיות שהוצגה, שימוש טהור במפרש נדיר, ונעשה בעיקר ברשת האינטרנט, שם יש צורך בגמישות רבה. אחד היתרונות של שימוש בקוד בלתי מהודר הוא העובדה, שניתן להחליף את המפרש עצמו מבלי להדר מחדש את קובצי התוכנית. כך אין צורך להפיץ מחדש את התוכנית עם כל שדרוג של השפה בה כתוב קוד המקור. לתוכנית המיועדת להרצה באמצעות מפרש בדרך-כלל קוראים תסריט (סקריפט).

פתרון נוסף הוא שפות סינתטיות כדוגמת VB, שבה תהליך הפיתוח נעשה במצב של פירוש, ובסיומו אפשר להדר את התוכנה לקובץ EXE, להרצת התוכנית.

## שפות דינמיות

הרצה על ידי מפרש פשוטה יותר למימוש, אולם גוררת חסרונות לא מעטים. לדוגמה: מקבלים הודעה על שגיאת תחביר פשוטה רק בזמן ריצה.

בשפות כגון פרל, פייתון ו־PHP יש בכל הרצה תהליך ראשוני של הידור הקוד. בחלקן (לדוגמה: Python וב־PHP) יש גם מנגנונים לשמירת התוצרים של אותו הידור ראשוני. התוכנית עצמה מורצת רק לאחר מכן. אם כי בכל השפות הללו יש בדרך כלל מנגנון כלשהו לפירוש קוד חדש בזמן ריצה, במקרה הצורך ("eval").

שפות כאלו יריצו בדרך כלל את הקוד במכונה וירטואלית.

## שפות חצי-מהודרות

השאיפה כיום היא לבנות מתרגם, הנהנה מהיתרונות של מפרש ומהדר גם יחד. 

הפתרון שנמצא הוא הפרדת תהליך התרגום לשני שלבים: בשלב הראשון, שלב ההידור, מבוצע תרגום של תוכנית הכתובה בשפה עילית לשפת ביניים. זהו תהליך מורכב הדורש זמן רב יחסית. בשלב השני, שלב ההרצה, מתורגמת שפת הביניים לשפת מכונה (המכונה הספציפית עליה רצה התוכנית). זה תהליך פשוט יותר ומהיר באופן יחסי. 

כיום מובילות את התחום שתי סביבות פיתוח: JAVA ו-NET..
בסביבת JAVA, לאחר הידור התוכנית, נוצר קובץ המכיל הוראות בשפת Bytecode, ולפני הרצת התוכנית כל הקובץ מתורגם לשפת מכונה.
בסביבת NET., לאחר הידור התוכנית, נוצר קובץ המכיל הוראות בשפת CIL, וכל פונקציה בתוכנית מתורגמת לשפת מכונה לפני הרצתה.

על אף ההבדלים ביניהן, העיקרון העומד מאחורי שתי הסביבות הוא זהה, והוא התבססותן של שתי השפות על שימוש במכונה וירטואלית.

## ראו גם
*תוכנה - מונחים

## קישורים חיצוניים

קטגוריה:ערכים שבהם תבנית בריטניקה אינה מתאימה
קטגוריה:תכנות
קטגוריה:מונחים בתוכנה