IBM RPG
Az RPG (Report Program Generator) egy, az IBM által kialakított általános célú programnyelv. Az iSeries (AS/400) natív programnyelveként ismert, de már az 1970-es években is elterjedten használták mainframe környezetben (IBM/360, IBM/390). Legutolsó változata (RPG ILE) tartalmaz egyszerű funkciókat és eljárásokat, statikus és dinamikus linkeket, eszközöket C-ben megírt rutinok hívására, rekurzív és újrahívható (re-entrant) kódot.
RPG Report Program Generator | |
Paradigma | többelvű |
Megjelent | 1959 |
Fejlesztő | IBM |
Utolsó kiadás | RPG IV version 7 release 1 (2010-04-23) |
Típusosság | erősen típusos, statikus tipus |
Dialektusok | RPG, RPG II, RPG III, RPG 400, RPG IV, RPG/ILE; RPG/Free, Baby/36, Baby/400, Lattice RPG |
Hatással volt rá | 9PAC, FARGO |
Befolyásolt nyelvek | RPG II |
Operációs rendszer | CPF, SSP, OS/400, OS/VS1, z/OS, VS/9, PRIMOS, OpenVMS, Burroughs MCP, Windows |
Áttekintés
szerkesztésAz eredetileg az 1928-tól az IBM által gyártott lyukkártya feldolgozását végző kártyaválogató gépek mechanikai algoritmusának digitális megvalósítását biztosító query eszközből, nagy teljesítményű funkcionális programnyelvvé vált. Az AS400-as gépek bevezetésekor ezt az IBM 50 éves amerikai népszámlálási adatokat tartalmazó lyukkártyakötegekkel demonstrálta.
Az RPG legnagyobb erénye és egyben unikális tulajdonsága az úgynevezett RPG programciklus. Ez azt jelenti, hogy minden RPG program önmagában egy implicit ciklust hajt végre. Ez a ciklus egy vagy több fájl minden rekordján végezhet műveleteket. A ciklus folyamán, amíg a programciklus explicit módon be nem fejeződik, lehetőség van interaktív lépések beiktatására is. Ez az implicit RPG ciklus a szekvenciális adathordozók korában rendkívüli módon megkönnyítette a programozók dolgát, egy RPG-ben megírt táblázóprogram mindössze pár kártyából (sorból) állt, míg ugyanezen feladat elvégzésére COBOL-ban több száz soros programot kellett írni. A közvetlen hozzáférésű adathordozó megjelenését követően az RPG ciklus elveszítette jelentőségét. Napjainkban az RPG-programozók a nyelvben egyébként megtalálható cikluskezelő eljárásokat (do until, do while) használják.
Története
szerkesztésAz RPG még napjainkban is használt programnyelv, amelyet lyukkártya-feldolgozó gépek vezérlésére készítettek. Eredetileg az IBM az 1960-as évek elején fejlesztette ki az akkor legelterjedtebb IBM 1401 számítógépre. Eredeti elnevezése: Report Program Generator jelzi, hogy adatfájlokból kimutatások, táblázatok, report generálására használták: részösszegek, összegek stb. automatikus képzésére. Az akkor létező alternatív programnyelvek mellett, COBOL vagy FORTRAN (az egyik nagyon munkaigényes, a másik tudományos célra készült) az RPG IBM-gépeken, gazdasági környezetben verhetetlen volt.
Az RPG fejlesztését az IBM változatlanul folytatta nagygépes rendszerei (mainframe) számára is, így került piacra a S/390 programnyelveként az RPG II.
Az IBM a System/3-as rendszerét eredetileg mint könyvelő gépet (Tabulátor machine) fejlesztették ki, de alkalmassá tették RPG-ben írt programok futtatására is. Így a System/3-nak és továbbfejlesztett változatainak (System/32, System/34, és System/36) is az RPG volt a natív programnyelve.
Gyökeres változást az RPG III. hozott, ezt a System/38 számára fejlesztettek ki. Az RPG III már korlátozottan közvetlen hozzáférésű (DASD) eszközök kezelésére alkalmas utasításokat is tartalmazott. A legjelentősebb újítások a RPG III-ban a modern struktúrák IF-ENDIF blokkok, DO ciklusok, és a szubrutinok bevezetése volt.
A System/38 utódja az AS/400. Ez egy középkategóriás számítógép család (eServer, iServer), ennek natív programnyelve az RPG/400 a korábbinál sokkal letisztultabb szintaxissal és integrált adatbázis-kezelő eszközökkel. Rendelkezett saját szerkesztőprogrammal, mely megfelelő maszkokkal támogatta a különböző típusú utasítások beírását.
1994-ben jelentették be az RPG IV-et (vagy RPG/ILE). Ez a C-2 specifikációk körében nagyszámú és változatos új utasítást tartalmazott: funkciókat és eljárásokat, statikus és dinamikus linkeket, eszközöket C-ben megírt rutinok hívására, rekurzív és újrahívható (re-entrant) kódot.
2001-ben az RPG i5/OS V5R1 változata még nagyobb szabadságot hozott a programozóknak a szabad formátum (free-format) bevezetésével, megszabadítva őket az eredeti kötött, oszlopfüggő forrásnyelvi formátumtól.
A /FREE „C” (calculation) utasítást követően az EVAL és CALLP utasítások tetszőleges oszlopba írhatók, így a szintaxisuk sokkal jobban hasonlít a szokványos programnyelvek szintaxisára.
A nyelv szerkezete
szerkesztésAz RPG program feldolgozása egy programciklus végrehajtásával történik. Eme RPG programciklus lépései újra és újra végrehajtódnak egészen addig, amíg a program vagy a futtatókörnyezet egy kitüntetett kapcsolót (triggert) – ez az LR (Last Record) – be nem kapcsol. Ez leállítja a program futását. Az első lépés a fejléc (Header) általános leíró információinak feldolgozása. Ezt követi egy adatrekord beolvasása és ennek feldolgozása. A következő lépés a feldolgozott adatok kiírása, kivitele. A feldolgozást különböző kapcsolók (triggerek) vezérlik. Legfontosabb a már fentebb említett LR kapcsoló. Ameddig az LR kapcsoló kikapcsolt (OFF) állapotban van, a feldolgozás a következő rekorddal folytatódik. A kapcsoló elnevezése egyébként a szekvenciálisan feldolgozott adathordozó utolsó rekordjára utal (Last Record).
Egy egyszerű RPG II programot 5 utasításból össze lehetett állítani:
- H Fejléc (Header) – az általános feltételeket és értékeket határozza meg.
- D Adatleíró (Data description) – a programban használt fájlok leírása, általában a következő információkat tartalmazza: fájlnév, az adatok felhasználásának módja, rekordformátum és -hossz, kimeneti vagy bemeneti egység hozzárendelése.
- I Bemeneti utasítások (Input) – a konstansok és adatstruktúrák mezőinek leírása.
- C Végrehajtandó utasítások (Calculation) – az adatok feldolgozására használt utasítások.
- O Kimeneti utasítások (Output) – a kimeneti rekordok mezői egyéb feltételeinek és formátumának leírása.
Mintaprogram
szerkesztés1 H 2 H* 3 H* VEVŐ KÁRTYÁK FELVITELE (1-2) EGY, A VEVŐKET TARTALMAZÓ MÁGNESSZALAGRA 4 H* 5 FINCARDS IPE F 80 80 READ40 6 FOUTTAPE O F2900 116 TAPE S 7 IINCARDS 011 01 1 C1 8 I 3 90CUST# 9 I 11 21 VNEEV 10 I 25 34 KNEEV 11 I 36 60 CIIM 12 I 021 02 1 C2 13 I 3 90CUST# 14 I 11 30 VAROS 15 I 32 33 MEGYE 16 I 35 39 ISZAM 17 OOUTTAPE D 03 18 O ISZAM 81 19 O MEGYE 76 20 O VAROS 74 21 O CIIM 54 22 O KNEEV 29 23 O VNEEV 18 24 O CUST# 7
Források
szerkesztés- Rákosi Miklós, Az RPG programozási nyelvek. Budapest, Műszaki Könyvkiadó. 1979. 330 p
- IBM. IBM 1401 RPG manual. C24-3261-1 (1964. október 31.)