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 clone aus einem bestehenden Objekt, nicht aus einer Klasseninstanziierung.
  • Slots: Variablen und Methoden sind gleichwertige Slots eines Objekts; ein Slot kann per parent Vererbung 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.