RPG (שפת תכנות)

RPG (ראשי תיבות של Report Program Generator) היא שפת תכנות עילית ליישומים עסקיים, שהוצגה בשנת 1959 למחשב IBM 1401. היא ידועה בעיקר כשפת התכנות העיקרית של קו מוצרי מחשבי הביניים של IBM, בהם מחשב System/3 וממשיכיו. השפה הציגה מספר מושגים ייחודיים, כגון מחזור התוכנית ותחביר מכוון העמודות. הגרסה העדכנית ביותר של השפה היא RPG IV, הכוללת מספר תכונות מודרניזציה, כולל תחביר בצורה חופשית.

פלטפורמות
שפת RPG נוצרה על ידי חברת IBM למחשבי IBM 1401, ובהמשך הותאמה למחשבי IBM 7070 ו-IBM System/360. גרסה מתקדמת, RPG II, שימשה את מחשבי הביניים של IBM, הסדרות System/3, System/32, System/34, System/38, System/36 ו-AS/400. השפה שימשה גם במחשבי VAX ובמחשבים של יצרנים נוספים.

היסטוריה

עם פיתוחה של השפה בשנת 1959, השם Report Program Generator תיאר את מטרתה: הפקת דוחות מקובצי נתונים. אתר FOLDOC  מייחס לעובד IBM וילף היי {Wilf Hey) את פיתוח RPG. שפת FARGO הייתה קודמתה של RPG במחשבי IBM 1401. שתי השפות נועדו להקל על המעבר מציוד לעיבוד נתונים של IBM למחשביה החדשים. מפעילי ציוד לעיבוד נתונים היו רגילים לחווט לוחות בקרה כדי ליישם פעולות קלט, פלט, בקרה ומנייה בשלבים שנקראו מחזור מכונה; FARGO ו-RPG חיקו את הרעיון של מחזור המכונה עם מחזור התוכנית. RPG הייתה עדיפה על פני FARGO והחליפה במהירות את FARGO כתוכנית המועדפת של מחולל דוחות.

IBM הטמיעה מאוחר יותר את RPG, אך לא את FARGO, במחשבי IBM 7070.

השפות החלופיות הזמינות בדרך כלל באותה תקופה היו שפת סף, COBOL או FORTRAN. שפת סף ו-COBOL היו נפוצים יותר במחשבי מיינפריים System/360 דגמי 30 ומעלה, ו-RPG הייתה נפוצה יותר במחשבי System/360 דגם 20.

RPG II
RPG II הוצגה בערך בשנת 1969, עם סדרת המחשבים System/3. מאוחר יותר הוא שימש ב-System/32, System/34 ו-System/36, עם גרסה משופרת של השפה. RPG II הייתה זמינה גם עבור מערכות גדולות יותר, כולל מחשבי IBM System/370 המריצים את מערכת ההפעלה DOS/VSE (לאחר מכן VSE/SP, VSE/ESA ו-z/VSE). חברת ICL יצרה גם גרסה למערכת ההפעלה VME/K שלה.

בימים הראשונים של RPG, הכוח העיקרי שלו היה מחזור התוכנית. מתכנת כתב קוד כדי לעבד רשומה בודדת, ומחזור התוכנית ביצע קוד זה על כל רשומה של קובץ הקלט, וידאג לזרימת הבקרה. באותו זמן כל רשומה (כרטיס מנוקב בודד) הושוותה לכל שורה בתוכנית, שתפעל לפי הרשומה, או לא, בהתבסס על האם בשורה הזו היה "מחוון" מופעל או "כבוי". האינדיקטור כלל קבוצה של משתנים לוגיים שמספרם 01-99 למטרות מוגדרות על ידי המשתמש, או קבוצות קטנות אחרות המבוססות על פונקציות עיבוד רשומות, שדות או דוחות. הקונספט של שבירות רמות והתאמת רשומות ייחודי לשפת RPG II, והוא פותח במקור מתוך מחשבה על קוראי כרטיסים מנוקבים. תוכניות RPG שנכתבו כדי לנצל את מחזור התוכנית יכולות לייצר דוחות מורכבים עם הרבה פחות שורות קוד מחשב מאשר תוכניות שנכתבו ב-COBOL ובשפות אחרות לעיבוד נתונים.

חלק התוכנית File Specifications פירט את כל הקבצים הנכתבים, נקראים או מתעדכנים, ואחריהם בא הפרק Data Definition Specifications, המכיל רכיבי תוכנית כגון מבני נתונים ומערכים, בדומה למקטע "Working Storage" של תוכנית COBOL. לאחר מכן, הפרק Calculation Specifications הכיל את הוראות עיבוד. בפרק Output Specifications ניתן להשתמש כדי לקבוע את הפריסה של קבצים או דוחות אחרים. לחלופין, קבצים, מבני נתונים ודוחות מסוימים יכולים להיות מוגדרים חיצונית, ובעיקר מבטל את הצורך לספק מפרטי קלט ופלט.

ההוראות בשפה
בפרק החישוב של התוכנית ניתן לתת את ההוראות הבאות (קוד ההוראה נכתב בטורים 28–32):

 קוד ההוראה משמעות ADD Add SUB Subtract MULT Multiply DIV Divide Z-ADD Zero and Add Z-SUB Zero and Subtract MVR Move Remainder MOVE Move MOVEL Move Left MHLZO Move High to Low Zone MLHZO Move Low to High Zone MLLZO Move Low to Low Zone MHHZO Move High to High Zone BITON Bit On BITOF Bit Off TESTB Test Bit GOTO Go To TAG Tag (destination of a GOTO) EXSR Execute Subroutine BEGSR Begin Subroutine ENDSR End Subroutine SETON Set On SETOF Set Off EXCPT Exception EXIT Exit RLABL Redefine Label ULABL User Label CALL1 Call PARM1 Parameter CHAIN Chain READ Read READE Read Equal READP Read Previous REDPE Read Previous Equal SETLL Set Lower Limits SET Set TIME Time of day (000000-235959) DSPLY Display SORTA Sort Array XFOOT Crossfoot MOVEA Move Array LOKUP Lookup (find in array)

דוגמה
לתוכנית מבנה קבוע. הטור השמאלי ביותר (טור 6) מציין את חלק התוכנית שבו עוסקת השורה, לפי המפתח הבא:
F - File specifications: הגדרת הקבצים המעובדים
I - Input specifications: תיאור רשומות הקלט
C - Calculation specifications: הגדרת החישוב המבוצע
O - Output specifications: הגדרת הפלט
     F***************************************************************
     F* THIS PROGRAM READS THE CONTENTS OF AN INVOICE HEADER FILE   
     F* AND PRINTS THE INVOICES PROCESSED FOR THE DATE SET IN THE   
     F* LOCAL DATA AREA.  THERE ARE LEVEL BREAKS AND TOTALS FOR      
     F* EACH STORE.                                                 
     F***************************************************************
     F*
     FINVHDR  IP  F      62            DISK
     FPRINTER O   F     132     OF     PRINTER
     IINVHDR  NS  01   1NC
     I                                        1   3 STORE L1
     I                                        4  13 INVNO
     I                                       14  20 CUSTNO
     I                                       21  45 STNAM
     I                                       46  53 INVDAT
     I                                       54  622TOTINV
     I           UDS
     I                                        1   8 RPTDAT
     C   01      INVDAT    COMP RPTDAT                   11
     C   01 11             ADD  TOTINV    L1TOT   92
     C   01 11             ADD  TOTINV    LRTOT   92
     OPRINTER H  101   1P
     O       OR        OF
     O                         PAGE  Z  106
     O                                  102 'PAGE'
     O                                   59 'VERY BIG'
     O                                   72 'STORES, INC.'
     O                         UDATE Y   17
     O                                    8 'RUN DATE'
     O        H  1     1P
     O       OR        OF
     O                                   73 'DAILY SALES BY STORE'
     O        H  2     1P
     O       OR        OF
     O                         RPTDAT    83
     O                                   63 'FOR DATE:'
     O        H  1     1P
     O       OR        OF
     O                                    6 'STORE'
     O                                   18 'INVOICE'
     O                                   28 'CUSTOMER'
     O                                   58 'CUSTOMER'
     O                                   78 'INVOICE'
     O        H  2     1P
     O       OR        OF
     O                                    6 'NUMBER'
     O                                   18 'NUMBER'
     O                                   28 'NUMBER'
     O                                   58 'NAME'
     O                                   78 'TOTAL'
     O        D  0     L1
     O                         STORE      6
     O        D  1     01 11
     O                         INVNO     18
     O                         CUSTNO    28
     O                         STNAM     58
     O                         TOTINV1B  78
     O        T  1     L1
     O                                   45 'STORE TOTAL...'
     O                         L1TOT 1B  78
     O        T 1      LR
     O                                   45 'GRAND TOTAL...'
     O                         LRTOT 1   78 

RPG III
RPG III נוצרה עבור System/38 ויורשו AS/400. גרסה זו חרגה באופן משמעותי מהשפה המקורית, וסיפקה מבנים מוּבנים מודרניים כמו בלוקי IF-ENDIF, לולאות DO ושגרות. RPG III הייתה זמינה גם עבור מערכות גדולות יותר, כולל IBM System/370 במערכת ההפעלה OS/VS1. זה היה זמין גם מחברת Unisys עבור מערכת ההפעלה VS/9 הפועלת על מיינפריים UNIVAC 90.

DE/RPG
DE/RPG או Data Entry RPG הייתה זמינה על סדרת IBM 5280 של תחנות עבודה להזנת נתונים בתחילת שנות ה-80. היא הייתה דומה ל-RPG III אבל ללא חלק Data Descriptions חיצוניים (DDS) לתיאור קבצים, כמו ב-System/38 וממשיכיו. במקום זאת, חלק זה היה צריך להיכלל במקור ה-RPG עצמו.

RPG/400
RPG/400 הייתה למעשה RPG III שפועלת על AS/400. יבמ שינתה את שם המהדר RPG ל"RPG/400" אך בזמן הצגתו הוא היה זהה למהדר RPG III ב-System/38. כמעט כל מוצרי IBM System/38 מותגו מחדש כ-xxx/400 והמהדר RPG לא היה יוצא דופן. תוכנית RPG III עברה הידור עם מהדר RPG/400 ללא שום דבר חדש לשפת RPG III, עד ש-IBM החלה לפתח קודי פעולה חדשים, כגון SCAN, CAT ו-XLATE לאחר מספר שנים של זמינות AS/400. שיפורים אלה ל-RPG III לא היו זמינים בגרסת System/38 של RPG III.

RPG IV ו-ILE RPG
RPG IV, שנודעה גם בשם ILE RPG, פורסמה בשנת 1995 כחלק מגרסה V3R2 של מערכת ההפעלה OS/400 (הקרויה כיום IBM i). שפת RPG IV הציעה מגוון גדול יותר של הוראות במסגרת Extended Factor-2 Calculation Specification שלה, ובהמשך החיים, פרק Calculation Specifications בפורמט החופשי ותחביר פרוצדורלי. RPG IV במסגרת Integrated Language Environment מכונה ILE RPG, ומדריכים למשתמש מסבירים את הניואנסים של שניהם. RPG IV ו-ILE RPG נתמכים על ידי IBM בפלטפורמת IBM i הנוכחית.

בשנת 2001, עם גרסה V5R1 של OS/400, שפת RPG IV הציעה חופש גדול יותר לחישובים מאשר Extended Factor-2 Calculation Specification: עורך מקור בעל יכולת טקסט חופשית, כחלופה למקור התלוי בעמודות המקורי. החישוב "" לא חייב שקוד הפעולה ייכתב בעמודה מסוימת; קוד הפעולה הוא אופציונלי עבור פעולות EVAL ו-CALLP; והתחביר בדרך כלל דומה יותר לזה של שפות תכנות למטרות כלליות. עד נובמבר 2013, הפורמט החופשי חל אך ורק על מפרטי החישוב. עם השדרוג של IBM i V7R1 TR7 לשפה, הוראות "" ו-"" אינן נחוצות יותר, והשפה סוף סוף שברה את הקשרים לכרטיסים מנוקבים.

IBM Rational Developer for i (RDi), סביבת פיתוח משולבת מבוססת Eclipse מומלצת על ידי IBM למפתחי RPG.

IBM ממשיכה לשפר את שפת RPG. נוספו עוד פונקציות מובנות (BIF). נוספה יכולת לקשר אל אובייקטי Java, וממשקי תכנות יישומים של IBM; ניתן להשתמש בשפה לכתיבת תוכניות CGI בעזרת ערכת הכלים Cgidev2 Web של יבמ, ארגז הכלים של RPG וחבילות מסחריות אחרות המותאמות לאינטרנט. אפילו עם השינויים, השפה שומרת על מידה רבה של תאימות לאחור, כך שתוכנית RPG שנכתבה לפני 37 שנים יכולה לרוץ היום עם מעט או ללא שינויים.

SQL פרקומפיילר מאפשר למפתחי RPG לכלול הוראות SQL מוטמעות סטנדרטיות ישירות בתוכנית. בעת הידור, ה-SQL פרקומפיילר הופך הוראות SQL לוראות RPG המתקשרות לתוכניות מנהל מסד הנתונים שמיישמות בסופו של דבר את בקשת השאילתה.

שפת RPG IV מבוססת על ערכת התווים EBCDIC, אך תומכת גם ב-UTF-8 וב-UTF-16 וערכות תווים רבות אחרות.

בשנת 2010 השיקה IBM את RPG Open Access, הידועה גם בשם Rational Open Access: RPG Edition. זה מאפשר להגדיר ממשקי קלט/פלט חדשים על ידי מתכנת - מה שמאפשר לקרוא ולכתוב נתונים למקורות ש-RPG אינו מספק להם תמיכה מובנית.

קישורים חיצוניים


הערות שוליים

קטגוריה:שפות תכנות
קטגוריה:תוכנות מבית IBM