לדלג לתוכן

RPG (שפת תכנות)

מתוך ויקיפדיה, האנציקלופדיה החופשית
RPG
פרדיגמות תכנות פרוצדורלי עריכת הנתון בוויקינתונים
תאריך השקה 1959 עריכת הנתון בוויקינתונים
מפתח IBM עריכת הנתון בוויקינתונים
גרסה אחרונה 7.4 עריכת הנתון בוויקינתונים
ניבים RPG, RPG II, RPG III, RPG 400, RPG IV, RPG/ILE; RPG/Free, Baby/36, Baby/400, Lattice RPG, VAX RPG II
הושפעה על ידי 9PAC, FARGO
לעריכה בוויקינתונים שמשמש מקור לחלק מהמידע בתבנית

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

שפת RPG נוצרה על ידי חברת IBM למחשבי IBM 1401,[2] ובהמשך הותאמה למחשבי IBM 7070 ו-IBM System/360.[3] גרסה מתקדמת, 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.[4]

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

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

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

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, פורסמה בשנת 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 הנוכחית.[5]

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

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

IBM ממשיכה לשפר את שפת RPG.[7] נוספו עוד פונקציות מובנות (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 אינו מספק להם תמיכה מובנית.[8]

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

[עריכת קוד מקור | עריכה]
  • Smith, Brian R.; Martin Barbeau; Susan Gantner; Jon Paris; Zdravko Vincetic; Vladimir Zupka (25 באפריל 2000). "Who Knew You Could Do That with RPG IV? A Sorcerer's Guide to System Access and More" (PDF). IBM International Technical Support Organization. נבדק ב-2012-02-18. {{cite web}}: (עזרה)
  • IBM (2016). ILE RPG Programmer's Guide (PDF). SC09-2507-10.

הערות שוליים

[עריכת קוד מקור | עריכה]
  1. ^ Alex Woodie (2020-08-24). "Is It Time To Rename RPG?". itjungle.com. ארכיון מ-2021-04-23.
  2. ^ IBM (1964). IBM 1401 RPG manual (PDF). C24-3261-1.
  3. ^ IBM System/360 - Operating System - RPG Language Specifications - Program Number 380S-RG-038 (OS) (PDF) (Seventh ed.). IBM. ביולי 1973. GC24-3337-6. ארכיון (PDF) מ-19 בינואר 2024. {{cite book}}: (עזרה)
  4. ^ Programming Systems Analysis Guide - IBM 7070 Series Report Program Generator (PDF). IBM. 1962. C28-6192. ארכיון (PDF) מ-19 בינואר 2024. {{cite book}}: (עזרה)
  5. ^ "High Level Languages". IBM.com. International Business Machines Corporation. 8 במאי 2018. ארכיון מ-3 באפריל 2022. {{cite web}}: (עזרה)
  6. ^ "IBM Rational Developer for i". IBM.com. International Business Machines Corporation. ארכיון מ-3 באפריל 2022. {{cite web}}: (עזרה)
  7. ^ IBM. "RPG Cafe". IBM.com. International Business Machines Corporation. ארכיון מ-3 באפריל 2022. {{cite web}}: (עזרה)
  8. ^ "Rational Open Access: RPG Edition". IBM. ארכיון מ-2024-02-29.