Tcl (Tool Command Language, gesprochen „tickle“) ist eine interpretierte Skriptsprache, die John Ousterhout ab 1988 an der University of California, Berkeley als Makrosprache für ein CAD-System entwickelte. Ihr Markenzeichen: In Tcl ist alles ein Befehl — Programme bestehen aus Befehlen, die als Zeichenketten geschrieben und vom Interpreter Schritt für Schritt ausgeführt werden.
Erste Schritte
Der Interpreter tclsh führt Skripte aus, wish startet die GUI-Variante mit dem Tk-Toolkit. Ein erstes Programm:
#!/usr/bin/env tclsh
puts "Hallo Welt"
set x 5
puts [expr {$x * 2}]
Variablen werden mit set gesetzt, mit $name gelesen. Eckige Klammern […] führen einen verschachtelten Befehl aus, geschweifte Klammern {…} unterdrücken jede Substitution.
Wichtige Befehle
- Kontrollfluss:
if,while,for,foreach,switch,break,continue,return - Funktionen:
procdefiniert Prozeduren,upvar/globalgreifen auf andere Kontexte zu - Listen & Strings:
list,lappend,lindex,lrange,lsort,string,format,scan - Datenstrukturen:
array(assoziative Felder),dict(Wörterbücher) - System:
exec(Programme starten),open/close(Dateien und Pipes),file,clock,info - Modularität:
source,package require,namespace - Fehlerbehandlung:
catch,error
Praxis-Tipps
- Tcl lässt sich leicht einbetten und erweitern — fremde Programme registrieren über die C-API eigene Befehle. Das Automatisierungswerkzeug Expect baut darauf auf.
- Die Python-GUI
tkinterbasiert auf Tcl/Tk, Tk ist also auch außerhalb der Tcl-Welt allgegenwärtig. - Mit
exprwerden Zahlen gerechnet; der Ausdruck gehört aus Geschwindigkeitsgründen in geschweifte Klammern:expr {$x + 1}. - Befehle sind Zeichenketten — ungewöhnliche Werte (Leerzeichen, Sonderzeichen) werden mit
listkorrekt verpackt, statt Strings von Hand zusammenzusetzen.
Verwandte Grundlagen: Bash-Befehle, Perl-Befehle, Python-Befehle, Smalltalk-Befehle, Haxe-Befehle.
Smalltalk ist die Sprache, die den Begriff der objektorientierten Programmierung prägte: Alan Kay entwickelte sie ab 1972 am Xerox PARC, die standardisierte Version Smalltalk-80 erschien 1980 (mit Adele Goldberg und Dan Ingalls, inspiriert vom Dynabook-Konzept). Zwei Prinzipien sind radikal: alles ist ein Objekt und alles ist Nachrichtenaustausch (Message Passing). Auch das Model-View-Controller-Muster (MVC) stammt aus der Smalltalk-Welt.
Grundprinzip
Ein Programm besteht aus Objekten, die sich gegenseitig Nachrichten senden. Selbst Rechenoperationen sind Nachrichten:
"Hallo Welt" printString
3 + 4 "Nachricht + an die Zahl 3"
'abc' asUppercase
Zuweisung :=, Rückgabe ^, temporäre Variablen | x |, Blöcke [ :param | … ] (Funktionen), Symbole #name und Zeichen $c als Literale. Mehrere Nachrichten an dasselbe Objekt werden mit ; verkettet (Kaskade).
Die Umgebung als Befehlssatz
- Playground/Workspace: Code ausprobieren —
doItführt aus,printItzeigt das Ergebnis,inspectItöffnet den Inspektor - Transcript: Ausgabekonsole —
Transcript show: 'Hallo' - System Browser: Klassen und Methoden durchsuchen,
Smalltalk systemals Einstieg - Paketverwaltung: Monticello und Metacello, Start über den Pharo Launcher
- Reflection:
class,instVarNames,methodsliefern Metainformationen zur Laufzeit
Wichtige Implementierungen
- Squeak (1996, offen, Basis vieler Lernumgebungen wie Scratch)
- Pharo (2008, Abspaltung von Squeak, moderne IDE und aktive Community)
- GNU Smalltalk und VisualWorks (kommerziell, Cincom)
- SUnit (Kent Beck) — Urvater aller xUnit-Testframeworks
Verwandte Grundlagen: Objective-C-Befehle, Ruby-Befehle, Java-Befehle, Tcl-Befehle, Haxe-Befehle.
TeX ist das Textsatzsystem von Donald E. Knuth (Stanford University), das er zwischen 1977 und 1982 entwickelte. TeX ist eine vollständige Programmiersprache: Jede Ausgabe entsteht aus Befehlen, Makros und Boxen. Die von Knuth direkt eingebauten Grundbefehle heißen Primitive.
Die wichtigsten Primitive
def: definiert ein eigenes Makrohbox,vbox: horizontale und vertikale Boxencatcode: legt die Kategorie eines Zeichens festcount,dimen: Register für Zahlen und Längenif...fi: Bedingungen in Makros
Boxmodell
TeX setzt Text in Boxen, die sich zu Zeilen, Absätzen und Seiten zusammensetzen. hbox fasst Inhalte horizontal zusammen, vbox vertikal — aus diesen Bausteinen entsteht jede Seitenaufteilung.
Makros und Formate
Rohe Primitive sind für den Alltag mühsam; deshalb liegen darüber Makro-Ebenen. Das verbreitetste Format ist LaTeX von Leslie Lamport; plainTeX von Knuth selbst ist die schlanke Variante.
Literate Programming
TeX entstand in WEB, Knuths Methode des Literate Programming: Quellcode und Dokumentation stehen in einer Datei. Die Versionsnummer nähert sich asymptotisch der Kreiszahl Pi (3.14159).
Für die Druckausgabe wird TeX über dvips nach PostScript gewandelt.
PostScript ist eine Seitenbeschreibungssprache von Adobe (John Warnock und Charles Geschke), die 1982 entwickelt und 1985 mit dem LaserWriter bekannt wurde. PostScript beschreibt Text, Grafik und Bilder auf einer Seite — geräteunabhängig und als vollwertige Programmiersprache mit Stack und Postfix-Notation.
Stack-Prinzip
Operanden werden zuerst auf den Stack gelegt, dann folgt der Operator. 100 200 moveto legt erst die Koordinaten ab und bewegt dann den Stift.
Grafikbefehle
newpath
100 100 moveto
200 100 lineto
200 200 lineto
closepath
stroke
showpage
Wichtige Operatoren: newpath, moveto, lineto, curveto, closepath, stroke, fill und showpage.
Text und Zustand
show: Text ausgeben;findfont,scalefont,setfont: Schrift wählengsave/grestore: Grafikzustand sichern und wiederherstellentranslate,rotate,scale: Koordinatentransformationensetlinewidth,setrgbcolor: Linienbreite und Farbe
Verbreitung
EPS (Encapsulated PostScript) ist das Austauschformat für eingebettete Grafiken; Ghostscript rendert PostScript auf jedem System. Aus TeX- und LaTeX-Dokumenten erzeugt dvips PostScript-Ausgabe.
LaTeX ist ein Makro-Paket über dem Textsatzsystem TeX, das Anfang der 1980er Jahre von Leslie Lamport entwickelt wurde (erste Version 1984). LaTeX erleichtert das Schreiben wissenschaftlicher Dokumente: Überschriften, Querverweise, Literaturverzeichnisse und Formeln werden über klar benannte Befehle gesteuert, statt dass man jede Formatierung von Hand setzt.
Aufbau eines LaTeX-Dokuments
Ein Dokument beginnt mit der Dokumentklasse und einer Präambel; der eigentliche Inhalt steht zwischen den Befehlen egin{document} und end{document}:
documentclass{article}
usepackage[utf8]{inputenc}
usepackage[T1]{fontenc}
egin{document}
section{Einleitung}
Hier steht der Text.
end{document}
Die wichtigsten Klassen sind article, report und book; die KOMA-Script-Varianten heißen scrartcl, scrreprt und scrbook.
Wichtige Grundbefehle
section{...},subsection{...}: Überschriften mit automatischer Nummerierungextbf{...},emph{...}: Fett- und Kursivauszeichnunglabel{...},ef{...}: Querverweise innerhalb des Dokumentscite{...}: Literaturzitate, verwaltet über BibTeXitem: Listeneinträge in den Umgebungenitemizeundenumerate
Umgebungen
Mit Umgebungen werden ganze Blöcke formatiert: itemize für Aufzählungen, equation für nummerierte Formeln sowie figure und table für schwebende Objekte mit Beschriftung.
Kompilieren
Aus der .tex-Datei erzeugt pdflatex direkt PDF; der klassische Weg führt über DVI und PostScript (dvips). Ein hilfreiches Werkzeug für wiederholte Läufe ist latexmk.
Verwandte Grundlagen: TeX-Befehle, Markdown-Referenz.