7.4 - מאחורי הקלעים - פתרון
זיהוי הinterpreter¶
שאלות הבנה¶
1. קומפיילר לעומת interpreter:
- קומפיילר מתרגם את כל הקוד לקוד מכונה לפני הריצה ומייצר קובץ הרצה. היתרון: הקוד רץ מהר מאוד, והשגיאות מתגלות לפני הריצה. החסרון: צריך לקמפל מחדש בכל שינוי.
- interpreter קורא ומריץ את הקוד שורה שורה בזמן ריצה. היתרון: לא צריך קימפול, מהיר לפיתוח. החסרון: איטי יותר בזמן ריצה.
2. למה פייתון איטי יותר מ-C:
כי פייתון הוא שפת interpreter - הinterpreter צריך לתרגם כל שורה לקוד מכונה בזמן ריצה. שפות כמו C מקמפלות את הקוד מראש לקוד מכונה שהמעבד מריץ ישירות, בלי שלב תרגום נוסף.
3. מהו bytecode:
בייטקוד הוא גרסה מפושטת ומקמפלת של הקוד המקורי - קרוב יותר לקוד מכונה אבל עדיין לא קוד מכונה אמיתי. הinterpreter מריץ את הבייטקוד מהר יותר מאשר את קוד המקור, כי שלב הפרסינג נעשה פעם אחת בלבד.
4. מהו JIT:
JIT (Just In Time) הוא מנגנון שמזהה קטעי קוד שרצים הרבה פעמים ומקמפל אותם לקוד מכונה בזמן ריצה. כך אותם קטעים רצים במהירות של שפה מקמפלת, בלי לוותר על הנוחות של interpreter.
השוואת interpreters¶
מקרים לשימוש ב-PyPy:
1. תוכניות שרצות זמן רב עם לולאות כבדות - JIT ישתלם לאחר ה"חימום" הראשוני.
2. חישובים מספריים כבדים שלא משתמשים בספריות כמו NumPy.
3. שרתים שמטפלים בבקשות רבות - JIT מיטיב לאורך זמן.