- RPG (Programmiersprache)
-
RPG ist eine problemorientierte Programmiersprache für den kaufmännischen Bereich.
Inhaltsverzeichnis
Zweck und Ursprung
RPG steht ursprünglich für Report Program Generator. Die Sprache wurde von IBM ursprünglich für das Erstellen von kaufmännischen Listen (Reports) entwickelt. Ein Compiler für die erste Version erschien 1959. Zu damaliger Zeit arbeitete man mit Tabelliermaschinen und Lochkarten in der Datenverarbeitung, deshalb war der Sprachaufbau, bevor RPG IV erschien, spaltenorientiert. 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/400
Programme, 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:
- Header-Bestimmung − Sie legt allgemeine Bedingungen und Werte fest.
- File Description (Dateibeschreibung) − Sie beschreibt alle vom Programm verwendeten Dateien. Dafür werden folgende Informationen benötigt: 1. Dateiname, 2. Art der Dateiverwendung 3. Satzlänge in der Datei, 4. Eingabe- oder Ausgabeeinheit
- Input (Eingabebestimmung) − Sie legt Felder, Konstanten oder Datenstrukturen fest.
- Calculation (Rechenbestimmung) – Sie dient der Verarbeitung der Daten. Sie legt die Reihenfolge und die jeweiligen Befehle fest.
- Output (Ausgabeoperation) − Sie beschreibt die Felder und Sätze der Ausgabedateien sowie die Bedingung, unter der die Ausgabe durchgeführt wird.
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 IV
RPG 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:
- Die neue D-Bestimmung (Definitionsbestimmung) ist nun die Standardbestimmung für das Deklarieren von Feldern, Datenstrukturen oder Konstanten.
- Einbindung von SQL-Befehlen zum Lesen bzw Ändern von Datenbanken.
- Es ist gleichgültig, ob der Quellcode in Groß- oder Kleinbuchstaben geschrieben wird.
- Etliche Beschränkungen wurden korrigiert, z. B. die Erweiterung für die maximale Zeichenlänge von Feldnamen von 6 Zeichen auf 17 Zeichen.
- Vielfältige Möglichkeiten für Datums- und Zeitoperationen.
- Pointerorientierte Operationen.
- Eine Vielzahl integrierter Funktion (Build-In-Functions wie z. B. %trim - Entfernen von Leerzeichen).
- Möglichkeit nicht mehr spaltenorientiert arbeiten zu müssen durch die Compiler-Anweisung /FREE (erst ab OS/400-Version 5)
- Unicode-Unterstützung wird laufend verbessert; beispielsweise kann man ab V5R3 "UnicodeFeld = %UCS2(ZeichenFeld)" kodieren, ab V6R1 reicht "UnicodeFeld = ZeichenFeld".
- Ab V4R4 gibt es umfassende Unterstützung für die Anbindung von Java-Klassen. Dazu wurde der neue Datentyp "Objekt" geschaffen, und durch prototypisierten CALL können Java-Methoden in Klassen direkt aufgerufen werden.
- Ab V5R4 können RPG-Programmierer mit den neu geschaffenen Operationsschlüsseln XML-INTO und XML-SAX bequem auf Inhalte von XML-Dokumenten zugreifen.
- Ab V6R1 können Dateien auch lokal (in Funktionen) definiert werden. Die Limits für Zeichenvariablen und Datenstrukturen wurden auf 16 MB angehoben.
Beispiele
1. 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 compilieren. 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
Programm zur Berechnung der FakultätH 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.
Plattformen
RPG wurde ursprünglich für das IBM System/360 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 aktuell dem System i (vorgestellt 2008) den vorläufigen Höhepunkt erreichten. Es existieren aber auch Implementierungen für Siemens BS2000, WANG VS und HP3000 sowie verschiedene Compiler für unixbasierte Systeme (Unibol) und PC (Baby/400, Lattice-RPG).
Sonstiges
Unter Programmierern kursiert der Scherz, RPG bedeute "Raten, Probieren, Glauben" oder auch "Raten, Probieren, Gewinnen."
Weblinks
Wikimedia Foundation.