לדלג לתוכן

7.4 מאחורי הקלעים פתרון

זיהוי המפרש

import platform

print(platform.python_implementation())  # CPython
print(platform.python_version())

שאלות הבנה

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

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

3. מהו bytecode:
בייטקוד הוא גרסה מפושטת ומקמפלת של הקוד המקורי - קרוב יותר לקוד מכונה אבל עדיין לא קוד מכונה אמיתי. המפרש מריץ את הבייטקוד מהר יותר מאשר את קוד המקור, כי שלב הפרסינג נעשה פעם אחת בלבד.

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

השוואת מפרשים

מקרים לשימוש ב-PyPy:
1. תוכניות שרצות זמן רב עם לולאות כבדות - JIT ישתלם לאחר ה"חימום" הראשוני.
2. חישובים מספריים כבדים שלא משתמשים בספריות כמו NumPy.
3. שרתים שמטפלים בבקשות רבות - JIT מיטיב לאורך זמן.