PL/I – הבדלי גרסאות

תוכן שנמחק תוכן שנוסף
אין תקציר עריכה
מ הסבר בדף השיחה
שורה 51:
*[[מצביע]] כ[[טיפוס נתונים]].
* ניהול זיכרון דינמי: [[משתנה (תכנות)|משתנים]] חולקו לארבע קטגוריות מבחינת ניהול הזיכרון:
** AUTOMATIC: כברירת מחדל, המשתנה נוצר עם הפעלת הפרוצדורה שבה הוא מוגדר, ונעלם עם סיום הפעלת הפרוצדורה (בדומה למשתנים לוקליים ב[[שפת C]]). משתנים כאלה הם גם בעלי טווח הכרה (Scope) מוגבל, תכונה התורמת לקריאות של התכנית. ומגדילה את אוסף המזהים בהם המתכנת יכול להשתמש. מאפיין זה הוא ברירת מחדל להגדרת משתנה
** STATIC: משתנה המתקיים במשך כל זמן פעולתה של התכנית (בדומה למשתנים לוקליים סטטיים בשפת C).
** CONTROLLED: משתנה שהתכנית קובעת מתי ייווצר ומתי יפנה את הזיכרון - משתנה כזה [[הקצאת זיכרון דינמית|מוקצה באופן דינמי]] על גבי זיכרון הערימה. שפת PL/I איננה כוללת מנגנון [[איסוף זבל]].
** BASED: משתנה המבוסס על הזיכרון שהוקצה למשתנה אחר. בעזרת קטגוריה זאת המתכנת יכול להגדיר מנגנון הקצאת זיכרון דינמי משלו, התפור לצורכי התכנית (שפת [[C++|++C]] מאפשרת פעולה כזאת בעזרת מנגנון Placement new).
 
יכולות נוספות:
שורה 69:
*בלוקים נפתחים במילה BEGIN ומסתיימים במילה END.
*האופרטור '=' משמש הן לפעולת השמה והן לפעולת השוואה, בתלות בהקשר שבו הוא נמצא.
בניגודכמקובל לגרסאותבמרבית פרוטרןשפות המוקדמותהתכנות, PL/I לאאינה מאפשרתמתירה הגדרה של מזהים (עבור משתנים ופרוצדורות) הכוללים רווחים. הפרדה בין מילים במזהה נעשית באמצעות מקף תחתון (למשל: NEXT_PRIME).
 
===מילות מפתח===
מילות המפתח של השפה אינן [[מילים שמורות]], וניתן להשתמש בהם גם כמזהים. הקוד הבא, לדוגמה, חוקי (אם כי אינו מקובל):
שורה 75 ⟵ 76:
IF IF = THEN THEN THEN = ELSE ELSE ELSE = IF;
</div>
בשורה זו נבדק האם ערכו של המשתנה IF זהה לערכו של המשתנה THEN. אם כן, מושם במשתנה THEN ערכו של המשתנה ELSE; אחרת מושם במשתנה ELSE ערכו של המשתנה IF. ניתן להבחין בכך שהמלים IF, THEN ו-ELSE משמשות גם כמילות מפתח בשפה, וגם כשמות של משתנים. המשמעות של כל מופע של מילה ספציפית נקבעת לפי ההקשר. תכונה זאת פוגעת במידת הקריאות של הקוד (ולכן מקשה על תחזוקת קוד קיים), אךזו מקלה על כתיבת תכניות - המתכנת איננו מוגבל בבחירת השמות עבור משתנים על ידי אוסף מילות המפתח בשפה.
 
==דוגמת קוד==