Blue ist eine Lehrsprache mit integrierter Entwicklungsumgebung für den objektorientierten Programmierunterricht. Sie wurde von Michael Kölling und John Rosenberg zunächst an der University of Sydney und dann an der Monash University in Melbourne entwickelt und 1996 auf der SIGCSE-Konferenz vorgestellt. Blue ist ein Verwandter der Sprache Eiffel und der direkte Vorgänger von BlueJ, das das Blue-Design auf Java überträgt.
Grundprinzipien
- Objekte zuerst: Lernende erzeugen Objekte interaktiv und rufen Methoden direkt auf, statt erst ein vollständiges Programm schreiben zu müssen.
- Klassenbrowser: Die Umgebung zeigt Klassen und Objekte grafisch; Objekte werden per Mausklick instanziiert und inspiziert.
- Bewusst einfache Sprache: Blue reduziert die Sprachmittel auf das, was für den Einstieg nötig ist: Klassen, Objekte, Attribute, Methoden, Vererbung.
- Klasse statt Konstruktor-Boilerplate: Die Umgebung erzeugt Klassengerüste und hält die Syntax sichtbar.
Arbeiten mit Blue
class Person % Klassendefinition
...
end Person
!! newPerson % Objekt interaktiv erzeugen (Objekt-Bench)
newPerson.alter % Methode direkt aufrufen und Ergebnis ansehen
In der Blue-Umgebung stehen neben dem Editor ein Objekt-Bench (Leiste mit erzeugten Objekten), ein Inspektor für Attribute und ein Debugger mit Haltepunkten bereit. Dadurch wird das Verhalten einzelner Objekte unmittelbar sichtbar.
Praxis-Tipps
- Das BlueJ-Projekt (ab 1999) übernahm die Umgebungs-Philosophie von Blue für Java; Blue selbst blieb eine reine Lehrsprache.
- Der Ansatz „Objects First“ (erst Objekte, dann Syntax) prägt bis heute viele Einführungskurse.
- Köllings spätere Arbeit an Greenfoot setzt die Idee für interaktive Welten fort.
Verwandte Grundlagen: Self-Befehle, Emerald-Befehle, Eiffel-Befehle, Smalltalk-Befehle, Java-Befehle.
Self ist eine rein objektorientierte, dynamische Sprache auf Basis von Prototypen statt Klassen. Sie wurde 1986 von David Ungar und Randall Smith am Xerox PARC entworfen und später an der Stanford University und in den Sun Microsystems Labs weiterentwickelt. Self gilt als direkter Nachfolger der Smalltalk-Forschung: Es gibt keine Klassen, Objekte entstehen durch Klonen eines Prototyps, alle Daten und Methoden sind einheitlich Slots.
Grundprinzipien
- Prototypen statt Klassen: Ein neues Objekt entsteht per
cloneaus einem bestehenden Objekt, nicht aus einer Klasseninstanziierung. - Slots: Variablen und Methoden sind gleichwertige Slots eines Objekts; ein Slot kann per
parentVererbung herstellen. - self: Die Referenz auf das aktuelle Objekt heißt wie die Sprache selbst; Methodenaufrufe laufen über Message Dispatch.
- JIT-Compilation: Self war das erste System mit adaptiver, inkrementeller Just-in-Time-Übersetzung; diese Forschung floss später in die HotSpot-VM von Java ein.
- Klein VM: Eine metazirkuläre Self-VM, vollständig in Self geschrieben.
Arbeiten mit der Self-Umgebung
self -s self.snap # Snapshot der Laufzeitumgebung laden
# danach Outliner/World zum Inspizieren nutzen
(A clone) myMethod # Objekt aus Prototyp klonen und Methode senden
^ result # Rückgabe aus einer Methode
[ x + 1 ] # Block (Lambda), wie in Smalltalk
Die Umgebung ist stark grafisch geprägt (Morphic World, Outliner, Objekt-Inspektor); die Shell lädt Snapshots und erlaubt das Experimentieren mit Objekten zur Laufzeit.
Praxis-Tipps
- Self hat den Prototypen-Ansatz popularisiert, den JavaScript später für die Web-Welt übernahm.
- Das Sun-Team um Ungar nutzte die JIT-Erkenntnisse für die erste HotSpot-Java-VM (1999).
- Wer Smalltalk kennt, findet Slots, Blocks und Message Dispatch sofort wieder.
Verwandte Grundlagen: Smalltalk-Befehle, Emerald-Befehle, Blue-Befehle, JavaScript-Befehle, Java-Befehle.
tbl ist der Tabellen-Präprozessor der roff-Welt: Er übersetzt eine kompakte Tabellenbeschreibung zwischen den Markern .TS und .TE in die Formatierkommandos, die nroff oder troff für Spalten, Ränder und Ausrichtung benötigen. Geschrieben wurde tbl 1975 von M. E. Lesk bei den Bell Labs; in groff ist es fest integriert.
Aufbau einer Tabelle
Eine Tabelle besteht aus Optionszeile, Formatzeile und Daten:
.TS
center allbox;
c c
l l.
Sprache Jahr
roff 1973
tbl 1975
.TE
- Nach
.TSfolgen globale Optionen wiecenter(zentrieren) oderallbox(Rahmen um alle Zellen), abgeschlossen mit Semikolon. - Die Formatzeile beschreibt je Spalte die Ausrichtung:
llinks,czentriert,rrechts,nnumerisch. - Der Punkt nach der Formatzeile trennt sie von den Daten;
.TEbeendet die Tabelle.
Aufruf
tbl tabelle.ms | troff -ms -Tps > tabelle.ps
groff -t -ms -Tpdf tabelle.ms > tabelle.pdf
Im groff-Aufruf aktiviert -t den tbl-Präprozessor — ohne das Flag erscheinen die Rohdaten unformatiert. In der klassischen Pipeline läuft tbl vor eqn, damit auch Formeln in Tabellenzellen korrekt gesetzt werden.
Verwandte Grundlagen: roff-Befehle, nroff-Befehle, groff-Befehle.
roff ist die Urform des Textsatzes unter Unix: ein Auszeichnungs- und Formatiersystem, das aus reinen Textdateien mit eingebetteten Punkt-Kommandos gesetzte Dokumente erzeugt. Aus ihm gingen die Klassiker nroff und troff hervor — und bis heute basieren die Manpages von Linux und BSD auf dieser Sprache.
Geschichte
Die Wurzeln liegen in RUNOFF, das Jerome H. Saltzer 1964 für das MIT-Betriebssystem CTSS schrieb. Auf Unix übertrug Ken Thompson das Konzept; Joe Ossanna entwickelte daraus 1973 das erste echte roff für den PDP-11, zunächst in Assembler. Brian Kernighan übersetzte die Implementierung später nach C. Der Name ist eine Kurzform von run off — ein Dokument „ausdrucken“.
Grundprinzip: Punkt-Kommandos
Jede Zeile, die mit einem Punkt beginnt, ist ein Formatierkommando (Request), alles andere ist Fließtext:
.sp 2 " zwei Leerzeilen
.ce " folgende Zeile zentrieren
.br " Zeilenumbruch erzwingen
.nf / .fi " Zeilenumbruch aus / an
Darüber hinaus gibt es Makros (Kommando-Bündel wie .TH oder .SH), Registerspeicher für Zahlen und Strings für Textbausteine. Genau diese Mechanik wurde später zur Grundlage der Manpage-Auszeichnung.
Die drei klassischen Formatter
- roff: der ursprüngliche Allzweck-Formatter
- nroff: Ausgabe für Terminals und Zeilendrucker
- troff: Ausgabe für Fotosatzbelichter (Typesetter)
Die moderne GNU-Implementierung ist groff, das alle drei Varianten in einem Programm vereint. Tabellen in roff-Dokumenten formatiert der Präprozessor tbl.
Verwandte Grundlagen: troff-Befehle, nroff-Befehle, groff-Befehle.
nroff („new roff“) ist der Unix-Textformatierer für Geräte mit fester Zeichenbreite — Terminals und Zeilendrucker. Während troff für den Fotosatzbelichter optimiert wurde, erzeugt nroff ASCII-Ausgabe. Beide teilen sich dieselben Kommandos und Makro-Pakete, daher lassen sich Manpages mit nroff direkt im Terminal darstellen.
Geschichte
Joe Ossanna entwickelte nroff 1973 bei den Bell Labs zusammen mit troff aus dem ursprünglichen roff. Die GNU-Welt emuliert nroff heute über groff: Das Kommando nroff ist dort ein Wrapper um groff -Tascii beziehungsweise -Tutf8.
Typische Aufrufe
nroff -man anleitung.1 " Manpage im Terminal
nroff -Tutf8 anleitung.1 " UTF-8-Ausgabe mit Sonderzeichen
nroff -man -Tascii datei.1 | less " mit Pager anzeigen
Das -T-Flag wählt die Ausgabe-Kodierung: ascii, latin1, utf8 oder cp1047. Ohne Angabe rendert nroff in reinem ASCII, wodurch Sonderzeichen wie Gedankenstriche verloren gehen.
Rolle im man-System
Jede Manpage ist im Kern eine nroff-Datei mit Makros wie .TH (Titel), .SH (Abschnitt), .PP (Absatz), .B (fett) und .I (kursiv). Das man-Kommando filtert passende Komprimierungs- und Formatierstufen und reicht die Seite an nroff beziehungsweise groff weiter — so entsteht der vertraute Terminal-Look mit Fettschrift und Einrückungen.
Verwandte Grundlagen: roff-Befehle, troff-Befehle, groff-Befehle.