RPG (Programmiersprache)Report Program Generator (RPG) ist eine Programmiersprache für den kaufmännischen Bereich. Die Sprache wurde von IBM zunächst für das Erstellen von kaufmännischen Listen (Reports) entwickelt. GeschichteDie von IBM verfasste Geschichte der maschinellen Datenverarbeitung beschreibt RPG als „Brücke von der Stecktafel zur Datenbank“[1]. Sie ermöglichte daher den Übergang von der Tabelliermaschine (Stecktafel) zum Reportgenerator, wozu als Beispiel das System IBM 1401 herangezogen wurde. Ähnlich argumentieren die ehemaligen IBM-Mitarbeiter Günther Sander, Hans Spengler bei ihrer Betrachtung von RPG:
oder hier
Zu damaliger Zeit arbeitete man mit Tabelliermaschinen und Lochkarten in der Datenverarbeitung, deshalb war der Sprachaufbau, bevor die Version RPG IV erschien, spaltenorientiert. Abgebildet auf Gruppenwechsel. Die Sprache wird hauptsächlich im Bereich der Großrechner, Minirechner gleich der mittleren Datentechnik, wie beispielsweise auf dem S/390 oder der AS/400 (System i), eingesetzt. Von einer Sprache zur Listenbearbeitung entwickelte sich RPG weiter zu einer Programmiersprache, die alle kaufmännischen Anwendungen abdeckte, inklusive Dialogverarbeitung und Arbeit mit relationalen Datenbanken. RPG II, RPG III, RPG/400Programme, die mit RPG geschrieben wurden, pflegt man auch in der heutigen Zeit. Nach Weiterentwicklungen (RPG II, RPG III, RPG/400) können neuere Projekte inzwischen mit dem besseren RPG IV (ILE RPG) geschrieben werden. RPG-Programme werden in einem Programmzyklus verarbeitet, dessen Schritte sich ständig wiederholen. Im ersten Schritt werden allgemeine Informationen der Kopfzeile (Header) verarbeitet. Danach folgt das Lesen eines Datensatzes und dessen Verarbeitung. Der nächste Schritt ist die Ausgabe der verarbeiteten Daten. Ist danach ein bestimmter Indikator (der LR-Indikator) auf ON gesetzt, so wird das Programm beendet. Falls der Indikator weiterhin auf OFF gesetzt ist, wird der nächste Datensatz für die Verarbeitung vorbereitet. Ein einfaches Programm kommt mit fünf von insgesamt zehn Bestimmungen aus:
Der Programmzyklus übernimmt die Verarbeitungsregeln für die jeweilige Datei. Der Programmierer braucht sich also nicht um den Zugriff auf jeden einzelnen Datensatz zu kümmern, was jedoch auch eine gewisse Unflexibilität mit sich bringt. Die Verwendung des Zyklus ist ein Relikt aus RPG II. In heutigen RPG-Programmen wird er meist nicht mehr verwendet. RPG war außerdem mit gewissen Einschränkungen behaftet: So war es beispielsweise nicht möglich, komplexere Berechnungen, wie rekursive Algorithmen, auszuführen. RPG IVRPG IV (ILE RPG) ist eine von IBM entwickelte Programmiersprache. Die Abkürzung ILE steht für Integrated Language Environment und bezeichnet eine im Jahr 1993 eingeführte Entwicklungsumgebung. Die erste Sprache, die mit ILE konzipiert wurde, war ILE C/400 für die Version V2R3 des Betriebssystems OS/400. Erst in der Version V3R1 kamen die Sprachen ILE RPG, ILE COBOL/400 und ILE CL (Control Language) hinzu. Mit ILE ist es möglich, ein Programm zu erstellen, das aus Modulen besteht, die in unterschiedlichen Programmiersprachen (die aber der ILE-Familie angehören müssen) geschrieben wurden. ILE RPG bietet als Nachfolger von RPG einige erhebliche Veränderungen und Erweiterungen:
Beispiele1. Dateibeschreibung FDateiname+IPEASF.....L.....A.E/AEinh.Schlüsselwörter++ Ftest1 IF E DISK Dieses Beispiel zeigt, wie die Bestimmungen für die Datei test1 festgelegt wird. I definiert eine Eingabedatei, F legt eine voll prozedurale Datei fest, d. h. die Verarbeitung wird nicht dem Programmzyklus überlassen. Durch E wird festgelegt, dass die Datei extern beschrieben ist. DISK gibt an, dass die Datei auf der Festplatte oder im einstufigen Speicher liegt. RPG genießt eine außerordentlich gute Unterstützung der Datenbank. So ist es beispielsweise möglich, einen bestimmten Satz einer Datei über ihren Key zu lesen (Operationsschlüssel CHAIN), und das in einer Performance, die SQL auf der Plattform „i“ bislang noch nicht erreicht. Dazu reicht die Angabe eines K für „keyed access“ unter dem „A“ vor der „Ein-/Ausgabe-Einheit“. FDateiname+IPEASF.....L.....A.E/AEinh.Schlüsselwörter++ Ftest1 IF E K DISK Durch das E in der Dateibeschreibung definiert der Compiler alle in der Datei vorhandenen Felder; wenn Hilfsfelder verwendet werden, die genau so wie die Dateifelder typisiert sein sollen, ist „LIKE“ zu verwenden. Dann reicht es bei Datenbankänderungen oft, nur das entsprechende Programm zu kompilieren. Normalerweise ist das ohnehin nötig, da das Betriebssystem den Aufruf von Programmen, die mit einer älteren Version der Datei erstellt wurden, mit der Ausgabe einer „Aktualitätsprüfung“ verhindert. 2. Prozeduren, Definitionsbestimmungen und Rechenbestimmungen H DFTACTGRP(*NO) H************************************************************ D Fak PR 10I 0 D Zahl 10I 0 VALUE D Wert S 10I 0 D************************************************************ C EVAL Wert = Fak(5) C DSPLY Wert C EVAL *INLR = *ON C************************************************************ P Fak B D Fak PI 10I 0 D Zahl 10I 0 VALUE C C IF Zahl = 1 C RETURN Zahl C ELSE C EVAL Zahl = Zahl * Fak(Zahl – 1) C RETURN Zahl C ENDIF P Fak E Fak wird mit PR als Prozedur definiert. Das 10I 0 gibt an, dass es sich beim Rückgabewert um eine ganze Zahl handelt, die 10 Stellen lang ist und 0 Dezimalstellen besitzt. Zahl ist der erste Parameter der Prozedur. Er wird mit VALUE als Wertparameter deklariert. Die Prozedur muss schließlich unter den Hauptrechenbestimmungen definiert werden. Durch die Anweisung EVAL werden Feldern bestimmte Werte zugewiesen. DSPLY gibt eine Programmnachricht aus. INLR (LR = last record = letzter Datensatz) ist der Indikator, der angibt, dass das Programm beendet ist. 3. RPG-Free-Format DName+++++++++++ETDsVon++++Bi/L+++IDG.Schlüsselwörter++++++++ D Array S 10I 0 DIM(5) D K S 10I 0 /FREE FOR k = 1 TO %elem(Array); Array(k) = k; ENDFOR; EVAL *INLR = *ON; // das EVAL könnte man auch weglassen /END-FREE Dieses Beispiel zeigt die Verwendung des Free-Formats. Die eigentlichen Anweisungen müssen hierbei zwischen den Compiler-Direktiven /FREE und /END-FREE stehen. Kommentare werden mit // eingeleitet. RPG Jahr 2016
PlattformenRPG wurde ursprünglich für die IBM 1401 entwickelt. Für die Systeme /3, /32, /34, /36, /38 wurden immer wieder Erweiterungen geschaffen, welche schließlich mit dem ILE-Konzept auf der AS/400, iSeries und dem System i (vorgestellt 2008) den vorläufigen Höhepunkt erreichten. Es existieren aber auch Implementierungen für Telefunken TR 440, Siemens BS2000, WANG VS und HP3000 sowie verschiedene Compiler für unixbasierte Systeme (Unibol) und PC (Baby/400, Lattice-RPG). Linux/AIX: Ausgehend von dem ehemals öffentlich zugängigen Projekt „RPG2CPP“ von Edgar Hermanns wird seit 2007 bei der Firma „Phoenix Informatica Bancaria S.p.A.“ im italienischen Trient ein RPG400 zu C++ Übersetzer entwickelt, der RPG400 Anwendungen inklusive der zugehörigen CL Programme in Form nativer C++ Quellen auf Linux und AIX lauffähig macht. Derzeit (Stand Februar 2016) übersetzt der Compiler rund 98 % des Anwendungsbestandes der aus rund 30 Millionen Code-Zeilen in RPG400 besteht. Das Projekt ermöglicht es, weiter RPG400 Programme zu schreiben und auf den genannten Systemen laufen zu lassen. Dabei werden COPY-Statements, DDS-Quellen und Bibliothekslisten sowohl bei der Kompilierung als auch zur Laufzeit unterstützt. Als Datenbank kann dabei sowohl MySQL als auch Oracle eingesetzt werden. Weblinks
Einzelnachweise
|