מוסף מקצועי – PL/1

מאת:
מחשבות 17 | מאי 1966

הקדמה:

מחשבות • מוסף מקצועי

 

PL/1 PROGRAMMING LANGUAGE ONE

שפת תיכנות חדשה

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

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

שפת התיכנות הרב־תכליתית החדשה, PL/1 באה למלא חסרון זה. אך לא זו בלבד. נוסף לפתרון בעיות מדעיות ומינהליות, נועדה שפה זו לשמש גם בשטחים אשר בעבר נבצר מהתוכניתן לטפל בהם כלל במסגרת שפת תיכנות עילית כל שהי, כגון : תיכנות מערכות הפעלה ותיכנות (Systems Programming), בעיות של Real Time ועוד.

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

מטרה זו מושגת, בין היתר, ע״י היכולת במסגרת ה־ PL/1 לטפל בנתונים, אפילו עד לחלוקתם המפורטת ביותר לבתים ולסביות.

של פעולות מחשב בסיסיות. משהו בדומה ליצירה ספרותית, המבוססת על צרופים שונים של 22 אותיות ה־״א—ב״.

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

נקודת המיפנה בפישוט תהליכי התיכנות ארעה עם הכנסת השמוש באותיות וספרות רגילות, במקום סימולי מספרים. לדוגמה, במקום לכתוב 01000001 לציון ההוראה ”Load Address“, רשמו : ”LA“. לאחר מכן נוקבו הסימבולים בכרטיסים, הורצו במחשב ותורגמו ע״י תכנית לשפת המחשב.

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

חיסול ההפרדה למגמות

הופעתה של שפת התיכנות החדשה, 1/PL, מהווה צעד גדול לקראת יצירת שפת תיכנות אחידה ורב תכליתית.

במרוצת התפתחות עיבוד הנתונים האלקטרוני, נעשתה למקובלת ההפרדה בין המחשב ה״מדעי״ לבין זה ה״מינהלי״. שפות התיכנות העיליות (או, כפי שהן נקראות: Problem Oriented Languages), אך הבליטו פיצול זה למגמות, בהתפתחן בכיוון אחד — למטרות תיכנות מינהלי (Cobol), ובכוון אחר — למטרות תיכנות מדעי (Fortran ,Algol).

אם כי שפת ה־ PL/1 מצטיינת בעושר, המעניק לתוכניתן המנוסה שליטה מלאה על המחשב, בנויה היא כך, שכל תוכניתן, יהיה נסיונו אשר יהיה, יוכל לכתוב בה ביעילות לפי רמתו. עקרון ה־ PL/1 הוא, שבכל מקרה שהשפה מציעה מבחר של מספר אפשרויות, מוגדרת תמיד האפשרות הסטנדרטית. אפשרות סטנדרטית זו, ה״בחירה על ידי מחדל״ (Default Option), היא הנבחרת אוטומטית על ידי תכנית התרגום, כאשר התוכניתן אינו מציין במפורש את רצונו.

השמוש בשפה אחת לכל סוגי התכניות, יקל מאוד את נטל הדרכתם ואמונם של התוכניתנים. המבנה המודולרי של ה־ PL/1 יאפשר גם ללמד תת־קבוצות של השפה לאנשים שכל עסוקם בשטח מצומצם ומוגדר, ואינם זקוקים לכל אפשרויותיה.

שפה חדשה זו היא פרי מאמציה של ועדה משותפת לחברת י.ב.מ. ולארגון ה־ Share, שהוא התאגדות המשתמשים בציוד י.ב.מ. גדול ובינוני בארה״ב. ועדה זו החלה בעבודתה בשנת 1963. עם התגבשות מפרטי השפה, לאחר ששולבו בה שפורים, על יסוד התיעצויות עם לקוחות חברת י.ב.מ. מהשטחים המדעיים והמינהליים כאחד, פתחה החברה בפיתוח תכניות תרגום למחשבים מסדרת 360.

נמצאות בשלבי פתוח אחרונים שתי תכניות תרגום (Compilers), אשר תקפנה את מלוא אפשרויות השפה, האחת לגודל זכרון מינימלי של 256K והשניה לגודל זכרון מינימלי של 64K. כמו כן, תהיה תכנית תרגום לתת־קבוצה מאוזנת של השפה, אשר תדרוש רק 16K של זכרון.

שתי התכניות הראשונות תפעלנה במסגרת מערכת ההפעלה המלאה (Operating System), ואילו האחרונה, במסגרת הבסיסית (Basic Operating System).

ב־ PL/1 מקופלות כאחת כל האפשרויות של השפות Fortran ו־Cobol18, אך לא על דרך הצירוף, כי אם במסגרת שפה אחת, אחידה, וחד־משמעית. שפה זו יש לה כמה ובמה תכונות שאינן מצויות כלל בשפות קודמות אלה, מהן תכונות חשובות לניצול מלא של מערכת עיבוד נתונים מודרנית.

כתיבה חופשית

ב־PL/1 כותב התוכניתן בצורה חופשית, ללא הגבלות של עמודות או שוליים קבועים בטופס. אפשר לראות את ההוראה כשורת סימנים המסתיימת בסימן מיוחד (נקודה־פסיק). צורת כתיבה זו מקטינה את מספר טעויות ההעתקה והניקוב, ונודעת לה חשיבות מכרעת במערכות Tele-Processing, בהן נמסרת ה־ התכנית למחשב ע״י הדפסה במכונת כתיבה, מכיון שהצמידות לתכניתהדפסה קבועה מקשה על הכתיבה.

הקצאת זכרון דינמית

בתכנית PL/1 ניתן להקצות מקום באחסנת המחשב עבור נתוני התכניות, הן באופן סטטי — למשך כל זמן בצועה של התכנית, והן באופן דינמי — בשעת הבצוע.

שני סוגים של הקצאה דינמית עומדים לרשות התוכניתן ב-PL/1: אוטומטית ומבוקרת.

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

פעולות אי-סינכרוניות

בשפת PL/1 קיימת היכולת לפקח במפורש על משימות מקבילות (Tasks), שהיא יכולת מרכזית בשמוש במחשב, המאפשרת שלוב משימות (Multi-Tasking). בתכנית הכתובה ב־PL/1 ניתן גם ליצור בשעת הבצוע, באופן דינמי, משימות אשר תתבצענה במקביל לתכנית היוצרת, ואף לקבוע את סדר עבודתה של התכנית הראשית, על יסוד סיומן, או אי־סיומן של משימות־משנה אלה.

התערבויות־מחשב (interrupts)

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

עריכה (EDITING)

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

יצירת דוחות

ב־ PL/1 קיימות הוראות מיוחדות לפקוח נוח על תבנית הדף המודפס.

טפול בלתי אריתמטי

בשפת PL/1 הוענק לנתון האלפאביתי מעמד שוה לזה האריתמטי. קיים סוג של משתנה הקרוי ”String Variable“, שנועד לאפשר טפול נוח ואחיד בחומר המאוחסן כשרשרת של סימנים. תכונה זו של השפה תואמת את רצון מתכנניה, כי תשמש גם לכתיבת תכנית תרגום (Compilers) וכיוצא בזה.

תרגום על תנאי

חלק מהוראות ה־PL/1 משמשות בשנוי קל גם כהוראות לפקוח על מהלך התרגום משפת ה־PL/1 לשפת המכונה. שיטה זו של Conditional Compilation, שלא קנתה לה שביתה עד כה בשפות עיליות, מאפשרת בניית מספר תכניות למטרות שונות, אך קרובות, על יסוד אותה תכנית מקור.

19

להלן תכנית המדגימה את השמוש בשפה PL/1 לפתרון בעיה אופיינית לעיבוד נתונים מינהלי: עדכון רב־קובץ ע״י קובץ תנועות, תוך הדפסת דוח שגיאות.

התכנית מיצגת מהלך עדכון פשוט, שבו העיבוד עצמו מצטמצם בהוראה אחת, וזאת למטרת ההדגמה. קובץ האב וקובץ הבן נמצא על גבי סרט מגנטי ומכילים רשומות בנות 200 בתים כ״א, מסודרות בגושים בני 5 רשומות כ״א. האינפורמציה בקבצים אלה מופיעה ב״צורה פנימית״ (packed decimal, לדוגמה), ולכן אפשר להשתמש בה בתכנית ללא הסבה. שיטת הקלט/פלט המתאימה למקרה זה היא, ה־Record-Oriented Transmission של ה־PL/1. קובץ התנועות, לעומת זאת, נמצא על גבי כרטיסי ניקוב, וההסבה מצופן הניקוב לצורת האחסון המתאימה לחשובים, מתבצעת בעזרת הוראות של Stream-Oriented Transmission, בהן ניתן לפרט את ההסבות הרצויות.

לפני התחלת העדכון מגדירה התכנית, בעזרת ההוראות “ON”, את הפעולה שיש לבצעה, כאשר כל קובץ וקובץ יגיע לסיומו. הוראות אלה הן בבחינת פקודות־קבע וקובעות את התגובה הרצויה ל־interrupt של המחשב. באופן דומה מפקחת התכנית על מעבר לדף חדש ועל הדפסת כותרת על גבי יחידת הפלט הסטנדרטית של מערכת ההפעלה (SYSPRINT).

UPDATE: PROCEDURE OPTIONS (MAIN);

DECLARE

1 MASTER,

2 PARTNO FIXED (9),

2 OUANT FIXED (5),

2 OTHERINFO CHAR(192),

1 ADDITION,

2 PARTNO FIXED (9),

2 QUANT FIXED(5),

2 DESCRIPTION CHAR(52),

OLDSTOC FILE INPUT RECORD

ENV (F(1000,200) BUFFERS(2) MEDIUM (SYS003,2400) ),

NEWSTOC FILE OUTPUT RECORD

ENV (F( 1000,200) BUFFERS(2) MEDIUM (SYS004,2400) ),

TRANSAC FILE INPUT STREAM

ENV (F(80) BUFFERS (2) MEDIUM (SYS02,2540) );

ON ENDFILE (OLDSTOC) BEGIN;

IF ADDITION. PARTNO = 999999999 THEN STOP; ELSE DO;

MASTER. PARTNO = 999999999; GO TO COMPARE; END; END;

ON ENDFILE (TRANSAC) BEGIN;

IF MASTER. PARTNO = 999999999 THEN STOP; ELSE DO;

ADDITION. PARTNO = 999999999; GO TO COMPARE; END; END;

ON END PAGE (SYSPRINT) PUT EDIT

(‘STOCK UPDATE ERROR LISTING’)(PAGE,A,SKIP(2) );

SIGNAL ENDPAGE (SYSPRINT);

GET FILE (TRANSAC) EDIT (ADDITION) (F(9), F(5),A,X(14) );

START: READ FILE (OLDSTOC) INTO (MASTER);

COMPARE: IF MASTER. PARTNO < ADDITION.PARTNO

THEN DO; WRITE FILE (NEWSTOC) FROM (MASTER);

GO TO START; END;

IF MASTER.PARTNO = ADDITION.PARTNO

THEN MASTER.QUAN = MASTER.QUAN + ADDITION.QUAN;

ELSE PUT EDIT (‘ILLEGAL TRANSACTION’, ADDITION)

(A, X(5), F(9),X(5), F (5), A, S KIP);

GET FILE (TRANSAC) EDIT (ADDITION) (F(9), F(5),A,X(14) );

GO TO COMPARE;

END;20