Oz ist eine multiparadigmatische Programmiersprache, die im Programming Systems Lab der Université catholique de Louvain und der Universität des Saarlandes für die Programmierausbildung entwickelt wurde. Das kanonische Lehrbuch „Concepts, Techniques, and Models of Computer Programming“ (Peter van Roy, Seif Haridi) baut vollständig auf Oz auf. Die Implementierung heißt Mozart (Mozart 2 als aktuelle Version).

Kernkonzepte

Oz vereint funktionale, logische, constraintbasierte, objektorientierte und nebenläufige Programmierung in einer einzigen Sprache. Zentrale Idee sind Datenfluss-Variablen: Eine Variable ist zunächst ungebunden und wird erst durch eine Zuweisung (X = 42) determiniert — lesende Operationen warten automatisch, bis der Wert verfügbar ist. Auf dieser Basis entstehen nebenläufige Programme ohne explizite Locks. Ein weiteres Alleinstellungsmerkmal sind Ports als leichtgewichtiges Actor-Modell, konzeptionell verwandt mit Erlangs Message-Passing-Prozessen.

Der Compiler: ozc

ozc -c Foo.oz            # kompiliert Foo.oz zu Foo.ozf (gepickelter Code)
ozc -x Foo.oz            # kompiliert und erzeugt ausführbare Datei (Unix: Foo, Windows: Foo.exe)
ozengine Foo.ozf         # führt eine .ozf-Datei aus
ozemulator                # startet den grafischen Oz-Emulator
ozwish                    # Tcl/Tk-Shell für Oz
{Browse 'Hallo Welt'}     # Ausgabe im Oz-Browser (Emulator)

Syntax-Highlights

local X in
   X = 42
   {Browse X}
end

fun {Fakultaet N}
   if N =< 0 then 1 else N * {Fakultaet N-1} end
end

Constraints und Suche

Oz enthält eine ausgereifte Constraint-Programmierung über endliche Domänen (FD). Variablen erhalten eine Domäne, Constraints schränken sie ein, und die eingebaute Suche findet Lösungen:

declare
proc {VierFarben Problem}
   %% Variablen mit FD.int-Domäne deklarieren
in
   {FD.distribute ff Problem}
end
{Search.base.all VierFarben}

Die Prozeduren Choice und fail steuern die Suchverzweigung, Search sammelt Lösungen. In der OPI (Emacs-Schnittstelle) wird Code mit oz-compile-command (Standard: ozc -c %s) kompiliert.

Praxis-Tipps

  • Im interaktiven Modus brauchen Definitionen ein declare vor der ersten Verwendung.
  • Aus .ozf-Dateien lassen sich mit ozc -x plattformunabhängig ausführbare Programme erzeugen.
  • Für Lernzwecke ist die Kombination aus Emacs-OPI und {Browse} am schnellsten — der Browser zeigt Werte und Datenfluss direkt an.

Verwandte Grundlagen: Euler-Befehle, PL/0-Befehle, Simula-Befehle, Scheme-Befehle, Wyvern-Befehle, Opa-Befehle.