McGee, Pioniere für Listengeneratoren

Nach Cobol und Fortran ist RPG am weitesten verbreitet

29.06.1990

Die kommerzielle Programmierung hat ihre Ursprünge in den 50er Jahren mit elektronischen Buchungsmaschinen und später mit den ersten Programmgeneratoren. David Ferguson schildert als "Mann der ersten Stunde" die Geschichte der RPG-Sprachen und zeigt, daß der altmodisch anmutende Report Program Generator auch heute noch seine Existenzberechtigung hat.

RPG-Sprachen, die sogenannten Report-Program-Generator-Sprachen oder auch Listprogram-Generatoren, gibt es länger, als gemeinhin angenommen wird. Ihre Geschichte ist schon an sich interessant; darüber hinaus dient die RPG-Historie aber auch als wertvolle Hilfe, wenn man heutige Zustände verstehen möchte. So wäre - zum Vergleich - einem Studenten der Informatik anzuraten, das Werk "The Laws of Thought" von George Boole zu lesen, bevor er sich an einen Text über Boolesche Algebra wagt. Das Buch ist von den Pädagogen eines ganzen Jahrhunderts immer wieder überarbeitet und, "verbessert" worden.

Die Geschichte von Listprogram-Generatoren ist vergleichsweise kurz. Im Grunde beginnt die Historie des Programmierens Oberhaupt erst in den 40ern, mit einem zunächst ausschließlich technischen und wissenschaftlichen Programmieren. Kommerzielle Programme wurden erst in den 50ern geschrieben. Noch im darauffolgenden Jahrzehnt war das Fach kaum bekannt. Ich erinnere mich noch gut, daß ich damals einmal gefragt wurde, welchen Beruf ich ausübe. Als ich mich als "Programmierer" bezeichnete, wollte mein Gesprächspartner wissen: "Oh, und für welchen Sender arbeiten Sie?"

In Diskussionen über die Geschichte der Programmiersprachen wird RPG meist vernachlässigt. So blieb sogar bei der Konferenz "History of Programming Languages" in Los Angeles noch im Jahre 1978 RPG unerwähnt. Sehr wohl aber behandelte man Algol, APL, Apt, Basic, Cobol, Fortran, Joss, Jovial, Lisp, PL/1, Simula und Snobol.

Das ist um so erstaunlicher, als RPG in viel stärkerem Maße als irgendeine dieser anderen Sprachen zum Einsatz kommt - mit der möglichen Ausnahme von Cobol und Fortran. Die Ursprünge von RPG gehen außerdem weiter zurück als die der anderen Sprachen.

1942 entwickelte General Electric (GE) einen Granatenwerfer mit der Bezeichnung RPG, doch man gab dem Gerät bald einen anderen Namen. Ein paar Jahre später hatten auch die Russen ihren RPG. Das war die Abkürzung für "Rocket Propelled Grenade" (raketengetriebene Granate), beziehungsweise das kyrillische Gegenstück dazu. Es gab also zwei gleichnamige Produkte, die mit der Programmiersprache nichts zu tun haben.

Kommerzielle Programmgeneratoren erschienen erstmals Mitte der 50er Jahre. Vorher fand der größte Teil der kommerziellen Datenverarbeitung auf elektronischen Buchungsmaschinen statt. Die Steuerung dieser Einrichtungen zur Ausführung bestimmter Aufgaben erfolgte über die Verdrahtung von Schalttafeln. An diese Kunst denken Insider nur mit Schaudern, doch war die Schalttafel-Verdrahtung in der Tat Vorläuferin des Programmierens von Computern für kommerzielle Aufgabenstellungen.

Die ersten Programmgeneratoren waren im Grunde Versuche, den Spezialisten der Verdrahtung von Schalttafeln die Nutzung von Computern zugänglich zu machen. Selbst RPG III, der jüngste Schritt in der Evolution kommerzieller Programmgeneratoren, zeigt noch Rudimente dieser Schalttafel Verdrahtung.

Das sieht man unter anderem an der "Zyklus-Orientierung" von RPG, am festen Format, das dem sogenannten freien Format praktisch aller anderen Compiler-Sprachen gegenübersteht, und an den Bezugszahlen, die sich von Ko-Selektoren ableiten. Auch die Programmende-Bezugszahl - die einem "Eingabefach leer" entspricht, deutet noch auf Zeiten der Schalttafel-Verdrahtung hin.

Die ersten Programmgeneratoren wurden von W.C. McGee bei der "Hanford Atomic Products Operation" von GE (HAPO in Richland, Washington, für den Rechner IBM 702) entwickelt. McGee bestimmte und implementierte drei Programmgenerator-Typen: einen Sortier- (1955), einen Dateipflege- (1957) und einen Listprogram-Generator (1957).

Praktisch alle modernen DV-Computer verfügen über einen Sortierprogramm-Generator. Außerdem bezeichnet RPG heute einen Prozessor mit den Fähigkeiten sowohl eines Dateipflege- als auch eines Listprogramm-Generators. Die damaligen Generatoren stellten etwas bereit, was den heutigen "externen Dateibeschreibungen" entspricht, indem sie der Kartendatei "Feldformat-Beschreibungskarten" vorausschickten. So konnte in Verbindung mit "Feldformat-Änderungskarten" durch Hinzufügen, Herausnehmen oder Größenänderung von Feldern eines Datensatzes die Datensatzbeschreibung geändert werden.

McGee, Erfinder der Einzelquellendatei

Für die damalige Zeit war der RPG von McGee erstaunlich ausgereift. Er konnte in einem Durchgang Mehrfachlisten generieren (gedruckte oder Lochstreifendateien) und bewältigte bis zu 15 Endsummen-Ebenen einschließlich Gesamtsummen. Dazu bot er automatische Seitennumerierung und Datensatzzählung sowie die Eliminierung von Nullen-Druck und Gruppenkennzeichnung zur Unterdrückung redundanter Daten bei der Leitungskennzeichnung. Und schließlich boten diese Generatoren Sicherheitseinrichtungen wie explizite Änderungs- und Leseberechtigungen.

Moderne Datenbanken vorwegnehmend, schlug McGee die Einzelquellendatei - gemeint sind sogenannte "Datenquellen" - anstelle mehrerer Quelldateien vor, da es nach seinen Ausführungen bei separaten Dateien keine zentrale Kontrolle über die darin gehaltenen Daten gibt. Zudem gebe es keine praktikable Methode, um zu gewährleisten, daß die Datenfelder, die mehreren Dateien gemeinsam sind, jederzeit miteinander übereinstimmen.

Der RPG von McGee konnte keine Kalkulationen ausfahren - ein Artikel von ihm beschreibt allerdings eine geniale und effiziente Methode zur Durchführung von Kalkulationen (Vergleiche Literaturhinweis 6). Dies war, und das mag für die damalige Zeit überraschend anmuten, so ziemlich das einzige, was noch fehlte mal abgesehen von neuer Hardware.

Man darf nicht vergessen, daß eine Datei damals eine Lochstreifen- oder Kartendatei war. Magnetplatten existierten ebensowenig wie indizierte oder geschlüsselte Dateien. Auch Arbeitsstationen gab es noch nicht. Deshalb bestand an vielen Funktionen die heute in RPG gegeben sind, noch kein Bedarf.

Etwa zu der Zeit, als McGee letzte Hand an seinen RPG anlegte, kündigte IBM den 704-Computer als Nachfolger des 701 an. Beide Rechner waren für den Einsatz im wissenschaftlichen Bereich vorgesehen. Aber auch die Anwender dieser Systeme benötigten eine Datenverarbeitung im klassischen Sinne.

Computerhersteller lieferten in jenen Tagen im allgemeinen keine Programme und schon gar keine Compiler. IBM machte da keine Ausnahme. Die meisten gängigen Programme für den 704 wurden von Mitgliedern der Share-Organisation entwickelt.

Das war eine Gruppe für Benutzer wissenschaftlicher IBM-Rechner. Um den Datenverarbeitungs-Bedarf von Anwendern der 704-Systeme zu befriedigen, setzte Share einen Unterausschuß zur Entwicklung von Programmgeneratoren ein.

Der inzwischen verstorbene Fletcher Jones von der damaligen North American Aviation - der heutigen Rockwell International - stellte sich dieser Aufgabe mit einem Team, zu dem auch Robert Paul und Kerry White gehörten. Das Ergebnis hieß "Surge" (Sorting, Updating, Report Generate, Etcetera). Surge berücksichtigte die meisten Merkmale von McGees System und ermöglichte Rechenoperationen mit +, -, * und /. Als Mathematiker halte ich diese Symbole für viel eingängiger als Add, Sub, Mult und Div.

Der nächste Schritt in der Entwicklung von RPG folgte kurz nach der Ankündigung des 709-Rechners durch IBM. Zu diesem Zeitpunkt war der 702 bereits vom 705 abgelöst worden. Der neue 709 sollte jetzt universal einsetzbar sein, das heißt, er sollte ebenso ehemaligen 704-Anwendern für wissenschaftliche Zwecke als auch Anwendern des 705-Rechners im kommerziellen Bereich dienen. Tatsächlich erwies sich der 709-Rechner aber nur als ein recht ordentlicher wissenschaftlicher Rechner.

IBM-User entwickelten Programmgeneratoren

Und da von IBM praktisch keine Software zur Verfügung stand, setzte die Share-Organisation 1958 wiederum einen Unterausschuß ein, der einen Satz von Programmgeneratoren für den 709 entwickeln sollte. Das Projekt, an dem ich erstmals beteiligt war, hieß "9PAC". Der größte Teil der Arbeit wurde auch hier von Fletcher Jones Gruppe geleistet.

Die entwickelten Produkte umfaßten traditionell einen Dateipflege-Prozessor sowie einen List- und einen Sortiergenerator. Erstmals kamen "AND"- und "OR"-Bedingungen für die Datensatzauswahl hinzu. Die "Lösung" zum Kalkulationsprogramm bestand darin, daß Inline-Maschinenbefehle zugelassen wurden.

1959 arbeitete die Gruppe, die schon an den Projekten Surge und 9PAC beteiligt war, mit Roy Nutt, einem der Entwickler der ersten Fortran-Version zusammen, um kommerzielle Programmgeneratoren für den Honeywell 800 zu entwickeln. Diese Generatoren wurden in den "Fact"-Compiler eingebracht. Fact war im wesentlichen ein Compiler der "erklärenden" Art und soll daher an dieser Stelle nicht weiter berücksichtigt werden.

Ab 1960 engagierte sich Big Blue für RPG

Nachdem andere Gruppierungen einige Jahre lang erfolgreich mit Programmgeneratoren für den kommerziellen Einsatz auf IBM- und anderen Computern gearbeitet hatten, stieg Big Blue 1960 erstmals mit RPG für den IBM 1401 in den Ring. An sich war RPG für dieses Produkt nicht die richtige Bezeichnung, denn es konnte auch als Dateipflege-Generator verwendet werden. Die Rechenoperationen beschränkten sich wie bei dem Ergebnis des Surge-Projektes auf Addition, Subtraktion, Multiplikation und Division.

Leider ist bei diesem Produkt die Datenbeschreibung nicht mehr in der Datei enthalten, wie es in allen anderen oben genannten Systemen der Fall war, sondern im Programm. Externe Dateibeschreibungen gab es bei Big Blue erst wieder mit dem IBM-System 138 - leider haben sich die Armonker dazu entschlossen, dieses Merkmal in SAA-RPG nicht zu unterstützen.

RPG kam in einer Version, die in etwa einer Teilmenge der heutigen Form entspricht, um 1965 für das IBM-System /360, Modell 20, heraus. In dieser Erscheinungsform wurden die Rechenfähigkeiten deutlich gesteigert. Außerdem ließen sich erstmals Tabellen in RPG einbringen. Für die Tabellendefinition kamen Erweiterungsspezifikationen hinzu sowie ein Abfrageverb für das Suchen von Tabellen.

Ferner wurde RPG um die Verben TAG und GOTO ergänzt, wodurch der Generator wie eine Programmiersprache aussah. Der RPG-Compiler wies eine sonderbare Anomalie auf, die es dem Programmierer ermöglichte, aus dem für frühere RPG-Generationen so typischen RPG-Zyklus auszubrechen. Mit einem Einzelzeit-GOTO konnte man zu einem Gesamtzeit-TAG abzweigen und so mehrere Ausgaben während eines einzigen Eingabezyklus bewirken. Das entsprach einem EXCPT in RPG II.

Die RPG-Version für die /360 wurde auch für RCA und Univac (heute Unisys) implementiert, was Harry Leslie zu der später zutreffenden Vermutung veranlaßte, daß die RPG-Sprache zu einem Industriestandard werden würde.

IBMs System/3 war eine echte RPG-Maschine

Auf IBM/360, Modell 30, folgte 1969 das IBM System/3 mit RPG II, einem weit verbreiteten Dialekt. Dabei handelte es sich um eine echte RPG-Maschine, da praktisch jeder Anwender mit einem System/3 auch RPG einsetzte. Ich erinnere mich gut, daß ich mit mehr als einem System/3-Benutzer sprach, der dachte, RPG sei die Maschinensprache des System/3.

Bis zu diesem Zeitpunkt wurden kommerzielle Programmgeneratoren als Ersatz für Schalttafel-Verdrahtung betrachtet. RPG II dagegen sah man als Compiler mit einer Compiler-Sprache an. Dank der Befehle READ, EXCPT und FORCE konnte der Programmierer mit RPG II den RPG-Zyklus umgehen.

(Der oben beschriebene Trick, mit dem dies endlich auch auf dem IBM 360120 gelang, funktioniert hier nicht, weil er beim Kompilieren einen Abbruchfehler bewirken würde.)

Von mehreren Erweiterungen abgesehen, blieb RPG II während der Weiterentwicklung der IBM-Systeme 134, 136, 138 und AS/400 nahezu unverändert. Doch einige dieser Erweiterungen waren einschneidend. Die erste erfolgte als Reaktion auf die Einführung des strukturierten Programmierens durch Dijkstra. Mit RPG III für die IBM-Systeme 136 und 138 konnten Anwender jetzt strukturiert programmieren. In Hinblick auf RPG bedeutet das Verfahren des strukturierten Programmierens, daß auf die meisten Bezugszahlen sowie auf TAG- und GOTO-Befehle verzichtet werden kann. Praktiker, die beides verwendet haben, bestätigen, daß dadurch viele Programmierfehler wegfallen.

Die zweite wesentliche Erweiterung erschien ebenfalls bei RPG III auf den IBM- Systemen /36 und /38: die Einführung der Verben CALL und PARM. Die meisten Compilersprachen erlauben einem Programm, zur Ausführungszeit ein anderes in dieser Sprache geschriebenes Programm aufzurufen. RPG III für die IBM-Systeme gestattet jedoch darüber hinaus auch den Aufruf einer Prozedur. Dadurch können alle Softwareressourcen aus einem RPG-III-Programm genutzt werden. So entwickelte sich RPG zu einer vollständigen Sprache für die Datenverarbeitung. Eine Version von RPG III für die 134 und die 136 wurde von unserem Unternehmen entwickelt. Benutzer von RPG II können damit die effizienteren RPG-III-Befehle für strukturiertes Programmieren einsetzen. RPG III für die /36 enthält auch /38- und AS/400-Einrichtungen für den Aufruf von Programmen und Prozeduren.

David Ferguson ist vorsitzender Generaldirektor der ASNA Ltd. in London

Literaturverzeichnis

(1) E.W. Dijkstra, Structured Programming, NATO Scientific Affairs Division,

Brüssel 1970, S. 84 - 88.

(2) D.E. Ferguson, What is Structured Programming?, System 3X World, Januar 1988.

(3) IBM, Report Program Generator for IBM 1401 card system.

(4) H. Leslie, The Report Program Generator, Datamation, Juni 1967.

(5) L.F. Longo, Surge, A Recording of the Cobol Merchandise Control Algoritha, CACM 5 (1962), S. 98 - 100.

(6) W.C. McGee, Generalization, Key to Successful Electronic Data Processing, JACM, 6 (1959), S. 1 - 23.

(7) M. Moseley, Irascrible Genius Charles Babbage - Inventor, Hutchison, 1064.

(8) Share, 9PAC Preliminary User's Reference Manual, Dezember 1959.