Modula-3 ist eine von Luca Cardelli und weiteren Forschern bei DEC (Digital Equipment Corporation) und Olivetti Ende der 1980er Jahre entworfene Systemprogrammiersprache. Sie übernimmt das Modulkonzept von Modula-2, ergänzt es aber um Objekte und Klassen, Ausnahmen, automatische Speicherbereinigung, Generik und leichtgewichtige Threads. Wichtig ist die Trennung von sicheren und unsicheren Modulen: Unsafe-Features (Zeiger, Typumwandlungen) werden explizit markiert und gekapselt.

Grundgerüst

MODULE Hallo;
IMPORT IO;
BEGIN
  IO.Put("Hallo, Welt!
");
END Hallo.

Wichtige Sprachmittel

  • INTERFACE / MODULE: Trennung von Schnittstelle und Implementierung wie in Modula-2; jede Schnittstelle deklariert die öffentlichen Typen und Prozeduren.
  • REVEAL: sichtbare und versteckte Typ-Eigenschaften — eine Type kann erst später als >= (Obertyp) oder <= (Untertyp) von etwas anderem bekannt gemacht werden.
  • REFANY / OBJECT: Referenztyp-Hierarchie; Objekte werden über Referenzen angesprochen, Methoden heißen in Modula-3 Methoden (METHODS ... END).
  • GENERIC: generische Interfaces und Module zur typsicheren Wiederverwendung.
  • UNSAFE: explizit markierte unsichere Module, in denen Zeiger und Typumwandlungen erlaubt sind.
  • THREAD: leichtgewichtige Threads mit MUTEX und Condition-Variablen als Teil der Standardbibliothek.

Werkzeuge

cm3 -build            # Projekt bauen (README/Quellbaum)
cm3 -ship             # gebaute Artefakte in das Installationsverzeichnis kopieren
cm3 -install          # Bibliotheken/Programme systemweit installieren
cm3 -C                # (Re-)Kompilierung von Modulen im aktuellen Verzeichnis
m3ship                # Ship-Tool der CM3-Distribution
m3tk                  # Modula-3-Toolkit
m3tohtml              # Quelltext-Konverter nach HTML
m3c / m3front         # C-/Frontend-Tools der CM3-Toolchain

Praxis-Tipps

  • Der Referenz-Compiler ist Critical Mass CM3 (Open Source, aus dem DEC-SRC-Nachfolger hervorgegangen, heute von Elego Software Solutions gepflegt).
  • Modula-3 war das erste große System mit automatischer Speicherbereinigung für Systemsprachen und beeinflusste unter anderem Java und C#.
  • Die Sprache blieb wissenschaftlich einflussreich, fand aber nie breite kommerzielle Verbreitung — heute vor allem historisch und in Lehrbüchern präsent.

Verwandte Grundlagen: Modula-2-Befehle, Oberon-Befehle, Component-Pascal-Befehle und Sather-Befehle.