Ugrás a tartalomhoz

IBM RPG

Ellenőrzött
A Wikipédiából, a szabad enciklopédiából
RPG
Report Program Generator

Paradigmatöbbelvű
Megjelent1959
FejlesztőIBM
Utolsó kiadásRPG IV version 7 release 1 (2010-04-23)
Típusosságerősen típusos, statikus tipus
DialektusokRPG, 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 nyelvekRPG II
Operációs rendszerCPF, 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). 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.

Á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 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é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á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és]

Az 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é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. október 31.)