RPG (Report Program Generator) wurde 1959 von IBM für den IBM 1401 entwickelt, um Geschäftsberichte aus Dateien zu erzeugen. Daraus entstand eine der langlebigsten Programmiersprachen überhaupt: Über RPG II, RPG III und RPG/400 führt die Linie zum modernen ILE RPG (RPG IV) auf IBM i (AS/400) — dort wird bis heute produktiv entwickelt.
Klassische Form
RPG war lange spaltenorientiert: Ein Programm bestand aus Spezifikations-Formularen (Header, File, Calculation, Output), bei denen jede Spalte eine Bedeutung hatte. Moderne **FREE-Quellen erlauben frei formatierte Anweisungen.
**FREE
ctl-opt dftactgrp(*no);
dcl-s name char(20);
dcl-s age packed(3);
dsply 'Name:' ' ' name;
age = age + 1;
*inlr = *on; // Last Record: Programm beenden
Wichtige Operationen
CHAIN— wahlfreier Zugriff über Index oder Schlüssel;READ/READE/READPsequenziell lesenWRITE/UPDATE/DELETE— Datensätze schreiben, ändern, löschenADD/SUB/MULT/DIV— arithmetische Operationen im klassischen BerechnungsformularEVAL— moderne Ausdrücke;EXSRruft eine Subroutine auf (BEGSR/ENDSR)- Indikatoren
*IN01bis*IN99— Flags für Bedingungen und Steuerung (z.B.*INLRfür Last Record) - Programmzyklus — Detail-, Total- und Output-Phasen laufen automatisch pro Datensatz ab
Praxis
ILE RPG arbeitet eng mit DDS-Dateibeschreibungen und eingebettetem SQL zusammen und wird für ERP-, Logistik- und Finanzanwendungen auf IBM i eingesetzt.
Verwandte Einträge: PL/I-Befehle (Mainframe-Schwester), COBOL-Befehle (Geschäftsanwendungen), SQL-Befehle (eingebettete Datenbankabfragen), Rexx-Befehle (IBM-Skriptsprache).
Rexx (Restructured Extended Executor) wurde 1979 von Mike Cowlishaw bei IBM entwickelt — zuerst für VM/CMS, später für TSO/E und OS/2. Die interpretierte Sprache wurde als leicht lesbare Skript- und „Klebe"-Sprache konzipiert und gilt als der Vorfahre moderner Glue-Sprachen.
Erste Schritte
/* Hello World in Rexx */
SAY 'Wie heißt du?'
PULL name
SAY 'Hallo, ' name '!'
DO i = 1 TO 3
SAY i
END
Wichtige Konstrukte
SAY— Ausgabe;PULL— Eingabe aus dem Tastatur- bzw. Datenpuffer- Compound Variables (Stems) — dynamische Felder wie
liste.1,liste.2;liste.0zählt Einträge PARSE— Strings nach Mustern zerlegen (z.B.PARSE VAR zeile vorname nachname)DO i = 1 TO nmitEND— Schleifen;IF/THEN/ELSE— BedingungenADDRESS— Befehle an die Host-Umgebung (z.B.ADDRESS TSO,ADDRESS CMS)QUEUE— Daten in die Warteschlange legen; Built-ins wieWORDS,SUBSTR,TRANSLATE
Praxis
Rexx ist als Object Rexx (1994) und ooRexx sowie als portable Implementierung Regina frei verfügbar. Auf z/OS dient es bis heute als System-Kommando- und Automatisierungssprache.
Verwandte Einträge: PL/I-Befehle und RPG-Befehle (IBM-Sprachfamilie), Bash-Befehle (Unix-Pendant), Tcl-Befehle (weitere Glue-Sprache).
PL/I (Programming Language One) wurde 1964 von IBM für die System/360-Baureihe entwickelt und sollte erstmals Wissenschaft und Wirtschaft in einer Sprache vereinen. Die Abkürzung wird „PL/I" geschrieben, die Alias-Schreibweise lautet pl1. PL/I ist blockstrukturiert, kennt mächtige Exception-Behandlung und läuft bis heute auf z/OS-Mainframes.
Erste Schritte
/* Klassisches Hello World in PL/I */
HELLO: PROCEDURE OPTIONS (MAIN);
DECLARE NAME CHAR(20);
PUT SKIP LIST ('Name?');
GET LIST (NAME);
PUT SKIP LIST ('Hallo, ' || NAME);
END HELLO;
Wichtige Konstrukte
PROCEDURE OPTIONS (MAIN)— Einstiegspunkt;BEGIN/ENDbilden BlöckeDECLARE— Variablen mit Attributen wieFIXED BINARY,CHAR(20)oderFLOAT; Felder laufen im Gegensatz zu C von1bisnDO WHILE/DO UNTIL— Schleifen mit Abbruchbedingung;DO I = 1 TO 10ON-Units — Exception-Handler (z.B.ON ENDFILE (DATEI) GO TO FERTIG;)STRUCTURE— Datensatztypen mit Feldern, Vorläufer moderner Records||— String-Verkettung;//für Kommentare,/* */für Blockkommentare
Praxis
PL/I kann mehrere Tasks starten (CALL ... TASK, WAIT, EVENT) und eignet sich für transaktionale Geschäftslogik im Mainframe-Umfeld. Die Built-in Functions (z.B. SUBSTR, INDEX, TRANSLATE) decken String- und numerische Verarbeitung ab.
Verwandte Einträge: ALGOL-Befehle (Vorbild der Blockstruktur), Fortran-Befehle (wissenschaftliche Seite), COBOL-Befehle (Geschäftsanwendungen), RPG-Befehle und Rexx-Befehle (weitere IBM-Sprachen).
ALGOL (kurz für ALGOrithmic Language) ist eine Familie imperativer Programmiersprachen aus den späten 1950er- und 1960er-Jahren. ALGOL 60 gilt als einer der einflussreichsten Sprachentwürfe der Informatikgeschichte: Fast jede moderne Sprache – von C über Pascal bis Java – übernimmt Elemente aus seiner Syntax.
Die wichtigsten ALGOL-Konzepte
- Blockstruktur: Programme bestehen aus verschachtelten Blöcken, die mit
beginundendbegrenzt werden. Variablen gelten nur in ihrem Block (lokaler Gültigkeitsbereich). - Zuweisungsoperator
:=: Die Unterscheidung zwischen Zuweisung (:=) und Vergleich (=) stammt aus ALGOL und findet sich bis heute in Pascal und Modula. - Formale Syntaxbeschreibung: ALGOL 60 war die erste Sprache, deren Grammatik in der Backus-Naur-Form (BNF) beschrieben wurde – das Vorbild aller heutigen Sprachspezifikationen.
- Rekursive Prozeduren: Prozeduren können sich selbst aufrufen, Parameter werden per Wert oder per Name übergeben (call by value / call by name).
Minimales ALGOL-60-Beispiel
begin
integer i;
i := 0;
for i := 1 step 1 until 10 do
begin
print(i)
end
end
ALGOL und seine Nachfahren
ALGOL 60 wurde 1960 von einem internationalen Komitee um John Backus, Peter Naur und Friedrich L. Bauer verabschiedet. Aus der ALGOL-Linie gingen direkt hervor: Pascal-Befehle (Niklaus Wirth), Simula-Befehle (Dahl und Nygaard) und Modula-2-Befehle (Wirth). Auch die Syntax von C ist stark von ALGOL beeinflusst – C übernahm Blockstruktur, Semikolon-Trennung und die Kontrollstrukturen if/else/while.
Wer die Struktur moderner imperativer Sprachen verstehen will, findet in ALGOL 60 ihren gemeinsamen Ursprung.
Simula ist die erste objektorientierte Programmiersprache der Welt. Sie wurde Mitte der 1960er-Jahre von Ole-Johan Dahl und Kristen Nygaard am Norwegian Computing Center in Oslo entwickelt – zuerst als Simulationssprache (Simula 1), 1967 verallgemeinert als Simula 67.
Warum Simula so wichtig ist
- Klassen und Objekte: Simula führte das
class-Konzept ein – Daten und Methoden werden zu einer Einheit gekapselt und pernewinstanziiert. - Vererbung: Klassen können von anderen Klassen abgeleitet werden; virtuelle Methoden erlauben dynamisches Binden.
- Referenzvariablen: Objekte werden über Zeiger angesprochen, nicht über Kopien – die Grundlage aller späteren OO-Sprachen.
- Coroutinen: Simula unterstützte nebenläufige Abläufe, die für die diskrete Ereignissimulation gebraucht wurden.
Simula-Konzepte im Beispiel
Simula
class Auto;
begin
integer km;
procedure fahren(n); integer n;
begin km := km + n end;
end;
ref(Auto) a;
a :- new Auto;
a.fahren(100);
Simulas Erbe
Simula 67 basiert auf ALGOL 60 und erweiterte es um Klassen und Prozesse. Die Ideen von Simula beeinflussten direkt Smalltalk, C++ und Java. Auch die modulare Systematik von Modula-2 steht in der ALGOL-Tradition – Dahl und Nygaard erhielten 2001 gemeinsam mit Alan Kay den Turing Award für ihre Pionierarbeit.
Ohne Simula gäbe es die objektorientierte Programmierung in ihrer heutigen Form nicht.