IBM RPG

A Wikipédiából, a szabad enciklopédiából
RPG
Report Program Generator

Paradigma többelvű
Megjelent 1959
Fejlesztő IBM
Utolsó kiadásRPG 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


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). A legutolsó változata (RPG ILE) tartalmaz egyszerű funkciókat és eljárásokat statikus és dinamikus linkeket, eszközöket C-ben megirt rutinok hívására, rekurzív és újrahívható (re-entrant) kódot.

Áttekintés[szerkesztés]

Az 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 ugyanannak a feladatnak az 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és]

Az 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ása 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 a 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. 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 a 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, ez 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 a i5/OS V5R1 változata az RPG-nek 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és]

Az RPG program feldolgozása egy programciklus végrehajtásával történik. Ennek az RPG programciklusnak a 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 a feldolgozása. Ezt követi egy adatrekord beolvasása és ennek a 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, rekord formá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őinek egyéb feltételeinek és formátumának leírása.

Mintaprogram[szerkesztés]

 1   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. március 14.)