מתרגמים ושביעות עריכה אינטגרטיביות (IDEs)
הוצג| English | משמעות |
|---|---|
| compiler/kəmˈpaɪlə/ | מתרגם |
| source code/sɔːs kəʊd/ | קוד מקור |
| translator/trænˈsleɪtə/ | מתרגם |
| machine code/məˈʃiːn kəʊd/ | קוד מכונה |
| assembler/əˈsemblə/ | אסמבלר |
| assembly language/əˈsemblɪ ˈlæŋɡwɪdʒ/ | שפת אסמבלר |
| object code/ˈɒbdʒekt kəʊd/ | קוד מוצר |
| executable/ɪɡˈzekjʊtəbl/ | קובץ תוכנית ביצוע |
| interpreter/ɪnˈtɜːprɪtə/ | מפרש |
| bytecode/ˈbaɪtkəʊd/ | בייטקוד |
| portable/ˈpɔːtəbl/ | נייד |
| virtual machine/ˈvɜːtʃuːəl məˈʃiːn/ | מכונה וירטואלית |
| just-in-time compilation/dʒʌst ɪn taɪm ˌkɒmpɪˈleɪʃn/ | הרכבה בזמן אמת |
| integrated development environment/ˈɪntɪɡreɪtɪd dɪˈveləpmənt enˈvaɪrənmənt/ | סביבת פיתוח משולבת |
| context-sensitive prompts/ˈkɒntekst ˈsensɪtɪv prɒmpts/ | הנחיות תלויות בהקשר |
| auto-complete/ˈɔːtəʊ kəmˈpliːt/ | השלמה אוטומטית |
| dynamic syntax checks/daɪˈnæmɪk ˈsɪntæks tʃeks/ | בדיקות סינטקס דינמיות |
| prettyprint/ˈpretɪprɪnt/ | הדפסה נקייה |
| breakpoints/ˈbreɪkpɔɪnts/ | נקודות עצירה |
| single stepping/ˈsɪŋɡl ˈstepɪŋ/ | צעד אחד |
| report window/rɪˈpɔːt ˈwɪndəʊ/ | חלון דוח |
אף אחד לא האמין שהמחשב יכול לכתוב את התוכנה שלו
- בשנת 1952 גרייס הופר בנתה את ה-compiler הראשון, תוכנית שהפכה סימנויות של מתכנת להוראות מכונה. "אף אחד לא האמין לכך," אמרה מאוחר יותר. "הייתה לי compiler פעילה ואף אחד לא רצה לגעת בה. הם אמרו לי שמחשבים יכולים רק לבצע חישובים."
- כל שפה השתמשת בה מאז מבוססת על רעיון זה: אתה כותב source code לאנשים, ומתרגם מייצר את ה-machine code שהמעבד מפעיל.
- ישנם שלושה סוגי מתרגמים ואחד היברידי מפורסם, והמבחן דורש ממך לומר מתי ולמה להשתמש בכל אחד מהם.
- שיעור זה עוסק במתרגמים, במגבלות בין compiling ל-interpreting, בשילוב של Java בין שניהם ובכלים שה-IDE מספק סביבם.
source code, machine code וה-assembler
- המעבד מבצע רק machine code. מתרגם ממיר תוכנית שנכתבה לאנשים אליה.
- assembler ממיר assembly language למכונה: כל הוראת mnemonic,
LDD,ADD,JMP, הופכת בדיוק להוראת machine code אחת, ותוויות ומיקודים סמליים מוחלפים על ידי מיקודים אמיתיים. - Assembly משמש כאשר המתכנת זקוק לשליטה ישירה בחומרה: drivers של מכשירים, מערכות embedded, הלולאות הפנימיות ביותר של משחק.
התאם כל מתרגם לפעולתו.
Difficulty 2/5 · 140 coins + a small bonus on first completion today
אסמבלר: אסמבל→קוד מכונה; קומפילר: הכל בבת אחת לקובץ ביצועי; מפרש: שורה אחר שורה בזמן הרצה.
ה-compiler
- compiler ממיר את כל התוכנית ברמה גבוהה למכונה, object code, לפני שהיא מופעלת. הוא מייצר קובץ executable מדווח על כל שגיאות הסינטקס יחד, כרשימה, בסוף הה-mapping.
- הוא לא מפעיל את התוכנית. ברגע שהקוד נקי, ה-executable מופעל ללא ה-compiler מותקן, כל כך הרבה פעמים כפי שתרצה.
- מהיר בזמן הריצה, מכיוון שאין טרנסלציה בעת הריצה; אך ה-machine code קשור למעבד ומערכת הפעלה אחד.
הדרך של המתרגם: מקור לתוכנית הפועלת
עבור שלב אחר של איך מתרגם עובד — מתרגם את כל התוכנית פעם אחת, לפני שהיא פועלת. השווה זאת למתנס (interpreter), שמתרגם ומבצע שורה אחת בכל פעם.
הקומפילר שונה מהמפרש כי הוא:
Difficulty 1/5 · 100 coins + a small bonus on first completion today
מתרגם תורגם את כל הקוד בבת אחת לקובץ ביצועים שפועל ללא המתרגם. מפרש פועל שורה בשורה.
סדרו את מסלול המתרגם, מכתיבת הקוד ועד הפעלתו.
Difficulty 3/5 · 200 coins + a small bonus on first completion today
מתרגם תורגם את כל התוכנית פעם אחת לקובץ ביצועים; קובץ זה אחר כך פועל ללא המתרגם.
ה-interpreter
- Interpreter ממיר הוראה אחת בתוכנית ברמה גבוהה בפעם אחת ומפעיל אותה מיד לפני מעבר להבאה.
- אין קובץ executable שמיוצר. הוא עצור ב-השגיאה הראשונה שהוא נתקל בה ומדווח עליה, עם הקו, כדי שתתקן אותה ותפעיל מחדש.
- גם ה-source code וגם ה-Interpreter חייבים להיות קיימים בכל פעם שהתוכנית מופעלת, וכל פעלת re-translates, כך שהביצועים איטיים יותר; אך אותו source code פועל בכל מקום שיש בו interpreter.

כתוב פעם אחת והפעל, או תרגם בזמן אמת
מתי דוחה המפרש על טעות?
Difficulty 1/5 · 100 coins + a small bonus on first completion today
מפרש פועל שורה בשורה, ולכן הוא מדווח על טעות ברגע שהוא מגיע לשורה זו — יועיל במהלך הפיתוח.
מפרש אינו מייצר קובץ ביצועים עצמאי, ולכן יש להתקין את המפרש עצמו כדי להפעיל את התוכנית.
Difficulty 1/5 · 100 coins + a small bonus on first completion today
מפרש תורגם ומפעיל שורה בשורה בכל פעם — אין קובץ ביצועים נפרד לשלוח, בניגוד למתרגם.
יתרונות וחסרונות, כפי שהם מופיעים במפת הסימון
| קומפילר | אינטרפרטר | |
|---|---|---|
| מהירות ביצוע | מהירה, קוד מכונה מוכן | איטית יותר, מתורגמת בכל ריצה |
| מה שמשתמש צריך | רק את הקובץ לביצוע; המקור נשאר פרטי | את קוד המקור ואת האינטרפרטר |
| זיהוי שגיאות | כולן מצויות יחד לאחר התרגום | כל שגיאה מדווחת בשורה בה, בעת הפיתוח |
| שינוי בקוד | לקומפילר את כל התוכנה | לערוך ולהריץ מחדש מיידית |
| ניידות | פלטפורמה אחת; לקומפילר מחדש לכל אחת | רץ בכל מקום בו קיים אינטרפרטר |
עליכם לבחור במתרגם כאשר:
Difficulty 1/5 · 100 coins + a small bonus on first completion today
קובצי ביצוע מותאמים מהירים ועצמאיים. מפרשים מתאימים לפיתוח מהיר ותסריטים ניידים.
אילו נקודות תומכות בשימוש במתרגם בעת פיתוח תוכנית? סמן את כולן החלופות הרלוונטיות.
Difficulty 2/5 · 140 coins + a small bonus on first completion today
ציקלים מהירים של עריכה-הרצה ושגיאות בשוריה הן חוזקות המתרגם. מהירות בזמן הרצה היא חוזק המתרגם.
דוגמה מופרדת: אינטרפרטר בזמן הכתיבה, קומפילר בסיום
- מפתח משתמש באינטרפרטר בזמן כתיבת תוכנית ובקומפילר כאשר היא מוגמרת. הסבר כיצד משתמשים בכל אחד מהם. [4]
- במהלך הפיתוח, האינטרפרטר מרץ את החלק החסר בתוכנית מיד, בלי להמתין לתרגום מלא. כאשר הוא נתקל בשגיאה, הוא מדווח על השורה, כך שהמפתח מתקן אותה ומריץ מחדש מיידית: מחזור עריכה-הרצה מהיר שמקל על תיקון שגיאות.
- כאשר התוכנית מוגמרת, הקומפילר מתרגם את כל התוכנה לקובץ ביצוע הנרץ מהר יותר, אינו דורש מתרגם במחשב המשתמש, ושומר על פרטיות קוד המקור.
- שני נקודות לכל כלי: מה שהוא עושה, ולמה זאת מתאים לשלב ההוא.
Java: חלקית קומפילציה, חלקית פרשנות
- קוד המקור של Java מתורגם ל-באייטקוד, צורה ביניים צפופה וניידת שאינה קוד מכונה עבור מעבד אמיתי כלשהו.
- מכונה וירטואלית, ה-JVM, מפרשת את הבאייטקוד על כל פלטפורמה עליה היא רצה, או משתמשת ב-קומפילציה בזמן ריצה (JIT) כדי להפוך את החלקים העמוסים ביותר לקוד מקומי בזמן ריצת התוכנית.
- שלב הקומפילציה לוכד שגיאות סינטקס מוקדם; שלב הפרשנות מאפשר לקובץ באייטקוד אחד להריץ בכל מקום בו קיים JVM. Java ב-מצב קונסולה, תוכנת טקסט הנרצית מהשורה הפקודות, היא הדוגמה במסגרת הלימודים.

כתוב פעם אחת, הפעל בכל מקום: קובץ באייטקוד אחד, JVM אחת לפלטפורמה
Java מתרגמת לבייט-קוד הנרץ על JVM. היתרון העיקרי הוא:
Difficulty 1/5 · 100 coins + a small bonus on first completion today
בייט-קוד הוא עצמאי לפלטפורמה; כל JVM יכולה לרץ אותו (עם JIT המספק מהירות קרובה לזו המקומית לקוד תכוף).
מתרגם Java יוצר ____ עצמאי לפלטפורמה, שאותו מאתפרמת וירטואלית ממשיכה לתרגם.
Difficulty 1/5 · 100 coins + a small bonus on first completion today
בייט-קוד הוא ביניים: מתורגם פעם אחת, ואז נרץ על ידי ה-JVM על כל פלטפורמה. זה מה שהופך את Java למחציתית-מתורגמת ומחציתית-מתורגמת.
דוגמה מפורטת: מדוע להרכיב לקוד ביטוני ולאחר מכן לפרש אותו?
- הסבר מדוע Java מורכב לקוד ביטוני ולא ישירות לקוד מכונה.
- מחולל מייצר קוד מכונה עבור מעבד ואחד מערכות הפעלה בלבד, ולכן תוכנית שהורכבה במחשב אחד לא תפעל על אחר.
- מחולל של Java מכוון למכונה וירטואלית במקום זאת, ולכן הקוד הביטוני זהה בכל מקום. כל פלטפורמה מספקת את ה-JVM הספציפי שלה כדי לפרש אותו.
- העלות היא מהירות: פרשנות קוד ביטוני איטית יותר מרצת קוד מקומי, ולכן ה-JVM מוסיפה רכיבת זמן-אמת (JIT) לחלקים התכנים ביותר.
סביבת הפיתוח המובנית והארבע קבוצות של תכונותיה
- סביבת פיתוח מובנית (IDE) היא יישום אחד לכתיבה, תרגום, הרצה ודיבוג של תוכנית. הסיילבוס מחלק את תכונותיה לארבע קבוצות.
- לכתיבת קוד: הצעות בהקשר מופיעות אוטומטית עם המזהים, המילות המפתח או הפרמטרים המתאימים בנקודה זו; השלמה אוטומטית מסיימת את השם.
- לאיתור שגיאות בתחילה: בדיקות סינטקס דינמיות מדגשות שגיאה בעת הכתיבה, לפני התרגום. לצגה: הדפסה נעימה מציגה מילות מפתח, מזהים, מילים ומערךיות בצבעים שונים עם ריווח עקבי; הרחבה וקיפול מטשטשת גוף של בלוק כדי שתראו את המבנה הכללי.
- לדיבוג: נקודות עצירה משהות את התוכנית בשורה מסומנת; צעד יחיד מריצה שורה אחת בכל פעם; חלון מציג את ערכי המשתנים והביטויים; חלון הדוח מפרט שגיאות, אזהרות ופלט.

כתיבת קוד, איתור שגיאות, הצגה, דיבוג
איזו תכונה חלקית ממדיבור ה-IDE?
Difficulty 1/5 · 100 coins + a small bonus on first completion today
מדיבור מאפשר הגדרת נקודות עצירה, צעד אחר צעד דרך הקוד ובדיקת ערכי משתנים.
התאם כל תכונת IDE לקבוצת הנושא המתאימה.
Difficulty 2/5 · 140 coins + a small bonus on first completion today
כתיבת קוד, זיהוי שגיאות ראשוני, הצגה, דיבוג: אלו ארבע הקבוצות שמפרט הנושא, כאשר לכל אחת מהן ישנה תכונה אחת כאן.
דוגמה מפורטת: מציאת השגיאה ב-Calculate()
- פונקציה
Calculate()מחזירה ערך בלתי צפוי. תיארו כיצד תכונות הדיבוג של IDE עוזרות למצוא את הגורם. [4] - הניחו נקודת עצירה בשורה הראשונה של
Calculate(), כך שהתוכנית תושבת שם במקום להמשיך לרץ. - צעד יחיד דרך הפונקציה שורה אחת בכל פעם. לאחר כל צעד, קראו את ערכי המשתנים וכל ביטוי שביקשתם מ-IDE לעקוב אחריו, והשוו אותם למה שצפיתם.
- השורה הראשונה שלאחריו ערך הוא שגוי היא המקום בו שגיאת הלוגיקה נמצאת. חלון הדוח מציג כל הודעות שגיאת ריצה ופלט לאורך הדרך.

השהיה, צעד, בדיקה
סדר את השלבים למציאת שגיאת לוגיקה באמצעות כלי הדיבוג.
Difficulty 3/5 · 200 coins + a small bonus on first completion today
השהיה, צעד, בדיקה, השוואה, מיקום. כל אחד מהם הוא אחת מתכונות הדיבוג שמפרט הנושא.
סימונים נופלים מהיד
- מחולל אינו מריץ את התוכנית. הוא מתרגם את כולה ומייצר קובץ ניתן לביצוע.
- המתרגם עוצר בשגיאה הראשונה; המהדך מציין את כולן. אל תחליפו בין שני אלו.
- "מהיר יותר" דורש "בעת הרצה", ו"נייד" דורש "אותו מקור רץ בכל מקום בו קיים מתרגם".
- סדרו מאפייני IDE בארבע קבוצות של הסימנאר: נקודת עצירה היא דיבוג, הדפסה מעוצבת היא הצגה, פקודה תלויה בהקשר היא כתיבה. ביטוי בינה (bytecode) הוא לא קוד מכונה.
הבנתך מושלמת
- מתאסם: הוראת אסמבל אחת להוראת קוד מכונה אחת · מהדך: כל התוכנית, לפני ההרצה, קובץ ביצועים, כל השגיאות מצויות · מתרגם: הורהאה אחת בזמן, מתבצעת מיד, עוצר בשגיאה הראשונה, אין קובץ ביצועים
- מהדך למהירות, חלוקה והגנת הסודיות של המקור; מתרגם למחזור עריכה-הרצה מהיר, ניידות ולומדים מתחילים
- Java מהדך לביטוי בינה נייד שאותו JVM מתרגם או JIT-מהדך: חלקית מהודך, חלקית מתרגם
- מאפייני IDE בארבע קבוצות: כתיבה (פקודות תלויות בהקשר), זיהוי שגיאות ראשוני (בדיקות סינטקס דינמי), הצגה (הדפסה מעוצבת, הרחבה וקיפול), דיבוג (נקודות עצירה, צעדים יחידניים, משתנים, חלון דוחות)