מפרש (תוכנה)

מתוך ויקיפדיה, האנציקלופדיה החופשית
קפיצה אל: ניווט, חיפוש

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

מפרש לעומת מהדר[עריכת קוד מקור | עריכה]

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

יתרונות וחסרונות[עריכת קוד מקור | עריכה]

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

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

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

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

שפות דינאמיות[עריכת קוד מקור | עריכה]

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

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

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

שפות חצי-מהודרות[עריכת קוד מקור | עריכה]

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

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

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

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

ראו גם[עריכת קוד מקור | עריכה]