Joy ist eine rein funktionale Programmiersprache, die Manfred von Thun an der La Trobe University in Melbourne (Australien) entwickelte und 2001 veröffentlichte. Während klassische funktionale Sprachen Funktionen auf Argumente anwenden, basiert Joy auf der Komposition von Funktionen: Ein Programm ist eine Folge von Wörtern, die einen Stack in einen neuen Stack überführen. Es gibt keine Variablen und keine Parameterlisten — Programme werden als Daten behandelt, die sich zur Laufzeit kombinieren lassen.
Grundprinzip: Stack und Quotations
Wie der UPN-Rechner dc und die klassische Stack-Sprache Forth arbeitet Joy mit einem Datenstack: Literale werden gepusht, Operatoren holen ihre Argumente vom Stack. Der Unterschied zu Forth ist die funktionale Reinheit — Joy kennt keine Seiteneffekte im Kern, alles ist Funktionskomposition. Quotations, in eckige Klammern gesetzt, machen Programmstücke zu Daten:
2 3 + # Stack: 5
[ dup * ] # Quotation: Quadrat-Funktion als Datenobjekt
5 [ succ ] i # i führt die Quotation aus → 6
Wichtige Wörter und Kombinatoren
- Stack-Wörter:
dup,pop,swap,rot,cons,concat,id(Identität) - Arithmetik:
+,-,*,/,succ,pred,size,sum,first,rest - Kombinatoren:
i(Quotation ausführen),dip(Quotation unter einem Wert ausführen),map,filter,foldl,foldr,ifte(if-then-else),while,times
Kontrollfluss entsteht allein durch Kombinatoren auf Quotations — ohne Schleifenvariablen. Diese pointfreie, funktionale Stack-Programmierung beeinflusste moderne Concatenative-Sprachen wie Factor direkt.
CICS (Customer Information Control System) ist ein Transaktionsmonitor von IBM für Großrechner unter z/OS und z/VSE. Er verwaltet Tausende gleichzeitiger Online-Transaktionen aus Terminal-, Browser- und API-Zugriffen und entstand 1968/69 aus dem Vorgänger MTCS (Multi-Terminal Communication System).
Transaktionsorientierte Programmierung
Anwendungen laufen als Transaktionen: Kurze, atomare Verarbeitungseinheiten, die von CICS terminiert, überwacht und im Fehlerfall zurückgerollt werden. Der Programmcode wird meist in COBOL, PL/I oder Assembler geschrieben und spricht CICS über eingebettete EXEC CICS-Anweisungen an:
EXEC CICS READ FILE('KUNDEN')
INTO(KUNDENSATZ) RIDFLD(KUNDENNUMMER)
RESP(ANTWORT)
END-EXEC
Wichtige Befehlsgruppen
- Datei- und Datenzugriff —
READ,WRITE,DELETE,STARTBR/READNEXT(Browsen) auf VSAM-Dateien - Terminal-Kommunikation —
SEND/RECEIVEmit BMS-Maps (Basic Mapping Support) für maskenbasierte Bildschirme - Transaktionssteuerung —
SYNCPOINT(festes Commit),RETURNmitTRANSIDfür pseudokonversationelle Abläufe - Programmverwaltung —
LINK,XCTL,LOADund derCOMMAREA/DFHCOMMAREA-Datenaustausch zwischen Programmen - Web-Services —
WEB-Befehle und JSON/XML-Unterstützung moderner CICS-Transaction-Server
Warum CICS wichtig bleibt
Ein Großteil der weltweiten Finanz-, Versicherungs- und Bestellsysteme läuft bis heute auf CICS; die Transaktionszahlen pro Sekunde sind auch im Vergleich zu Cloud-Plattformen beachtlich. Ähnlich transaktionsorientiert arbeitet die Sprache MUMPS (M), die ihre integrierte Datenbank direkt in die Sprache einbettet.
Verwandte Einträge: JCL-Befehle, COBOL-Befehle und PL/I-Befehle.
MUMPS (Massachusetts General Hospital Utility Multi-Programming System, kurz M) ist eine imperative höhere Programmiersprache mit integrierter transaktionsorientierter Schlüssel-Wert-Datenbank. Neil Pappalardo entwarf sie 1966 am Massachusetts General Hospital als Ersatz für Assembler in der Medizininformatik; die Sprache ist seit 1977 ANSI- und ISO-standardisiert.
Kernkonzept: Globale Variablen
Das Besondere an MUMPS sind die globalen Variablen (Globals): persistent gespeicherte, hierarchische Schlüssel-Wert-Bäume, die direkt in der Datenbank liegen und wie normale Variablen angesprochen werden. Ein ^-Zeichen kennzeichnet eine Global-Referenz:
SET ^Patient(1001,"Name")="Müller"
SET ^Patient(1001,"Diagnose")="A411"
Wichtige Befehle
SET/KILL— Werte zuweisen bzw. löschenWRITE/READ— Ausgabe bzw. EingabeDO/GOTO— Unterroutine aufrufen bzw. springenIF/ELSE/FOR— KontrollstrukturenQUIT— Unterroutine verlassen,HALT— Programm beendenNEW— lokale Variablen beim Unterprogramm-Aufruf schützen
Systemfunktionen beginnen mit $, etwa $PIECE (Stringsegment), $LENGTH (Länge) oder $ORDER (nächster Schlüssel in einer Global).
Einsatzgebiete
MUMPS steckt in der US-Veteranenverwaltung (VistA/VA-EMR), in Krankenhausinformationssystemen (Meditech, Epic) und in freien Implementierungen wie GT.M (Greystone Technology M) und YottaDB. Das Abkürzungssystem ist standardisiert: jede Standard-Anweisung hat genau eine zugelassene Kurzform.
Verwandte Einträge: ABAP-Befehle, COBOL-Befehle und JCL-Befehle.
JCL (Job Control Language) ist die Steuersprache der IBM-Großrechner (z/OS), mit der Stapelverarbeitungsaufträge (Jobs) beschrieben werden. JCL sagt dem Betriebssystem, welche Programme laufen, welche Dateien sie brauchen und wie die Ausgabe behandelt wird — sie ist keine Programmiersprache im engeren Sinn, sondern eine Kontrollsprache.
Die drei Grundanweisungen
Jeder JCL-Job besteht aus mindestens drei Anweisungen, die in Spalte 1 beginnen:
//MEINJOB JOB (BESTELL),'BESTELLVERARBEITUNG',CLASS=A
//SCHRITT1 EXEC PGM=IEBGENER
//EINGABE DD DSN=MEIN.BESTAND,DISP=SHR
//AUSGABE DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
JOB— markiert den Jobbeginn, vergibt den Jobnamen und Steuerparameter (Class, Priorität)EXEC— führt ein Programm (PGM=) oder eine Prozedur (PROC=) ausDD— beschreibt Datendefinitionen: Eingabe-/Ausgabedateien (DSN=),DISP=für den Dateizustand,SYSOUT=für Druckausgabe
Wichtige Konzepte
- JES2/JES3 — Job-Eingabe-Subsysteme, die Jobs annehmen, einreihen und ausführen
- Prozeduren — mehrfach verwendbare Anweisungsblöcke, instream (
//X PROC) oder katalogisiert - GDG — Generation Data Groups: versionsverwaltete Dateigruppen
- Utilities — Standardwerkzeuge wie IEBGENER (Kopieren), IEBCOPY (Bibliotheken) oder SORT/MERGE
- IEFBR14 — leerer Job, klassisch zum Anlegen/Löschen von Dateien
JCL kennt keine Schleifen oder Verzweigungen im Sprachsinn; die Ablaufsteuerung übernehmen COND=-Parameter und Returncodes der Schritte.
Verwandte Einträge: CICS-Befehle, ABAP-Befehle und COBOL-Befehle.
TLA+ (Temporal Logic of Actions) ist eine formale Spezifikationssprache von Leslie Lamport für nebenläufige und verteilte Systeme. Ein System wird als Menge von Zuständen und Aktionen beschrieben; die temporale Logik erfasst, welche Verhaltensabläufe möglich sind. Lamport entwickelte TLA+ in den frühen 1990er-Jahren und dokumentierte es im Buch „Specifying Systems" (Addison-Wesley, 2002).
Grundmuster einer Spezifikation
---- MODULE Counter ----
EXTENDS Naturals
VARIABLE x
Init == x = 0
Next == x' = x + 1
Spec == Init / [][Next]_x
====
Ein Apostroph (x') bezeichnet den Wert der Variablen im nächsten Zustand. [][Next]_x erlaubt Stuttering-Schritte, bei denen sich nichts ändert — wichtig für die Komposition von Systemen.
Operatoren
- Logik:
/(und),/(oder),~(nicht),⇒(impliziert),A(für alle),E(es existiert). - Temporal:
[]P(immer P — Sicherheit),<>P(schließlich P — Lebendigkeit),P ~> Q(P führt zu Q),WF_/SF_(schwache/starke Fairness). - System:
ENABLED A,UNCHANGED x,[A]_v(Aktion mit Stuttering).
Sicherheit, Lebendigkeit, Verfeinerung
Eine Invariante []Inv drückt eine Sicherheitseigenschaft aus; Lebendigkeitseigenschaften sagen, dass etwas irgendwann eintritt. Mit Verfeinerungs-Abbildungen (Refinement Mappings) zeigt man, dass eine Implementierung eine abstrakte Spezifikation korrekt umsetzt.
Werkzeuge
- TLC, der Model Checker, durchsucht endliche Modelle systematisch nach verletzten Invarianten und Deadlocks.
- TLAPS, das TLA+ Proof System, beweist Eigenschaften maschinengeprüft wie ein Proof Assistant — verwandt mit Isabelle.
- PlusCal (2009) ist eine algorithmenähnliche Sprache, die zu TLA+ kompiliert.
- Die Toolbox ist die integrierte Entwicklungsumgebung mit Editor, TLC und TLAPS.
TLA+ wird unter anderem bei Amazon Web Services zur Verifikation kritischer Systemkomponenten eingesetzt. Während TLA+ zeitliches Verhalten modelliert, beschreiben Promela mit dem Model Checker SPIN ausführbare Prozessmodelle und Alloy statische Strukturen relational; Zustand und Operationen mengentheoretisch beschreibt die Z-Notation.