Worum geht's?
Anmerkung: Ab Version 8.0 wird ein Bytecode-Compiler verwendet, der die Tcl-Anweisungen "on-the-fly" in einen internen Bytecode übersetzt und diesen dann an Stelle des Tcl-Quelltextes interpretiert.
Entwickler: John K. Ousterhout und sein Team. John arbeitete früher an der University of California in Berkeley, wo die ersten Tcl/Tk-Releases entstanden. Später leitete er die Tcl/Tk-Entwicklung bei Sun Microsystems, Inc. und gründete im Februar 1998 die Firma Scriptics Corporation (http://www.scriptics.com/).
Verfügbarkeit: Der Tcl/Tk-Kern (Tcl and Tk core) sowie viele Erweiterungen der mittlerweile recht großen Tcl-"Gemeinde" sind frei (C-Quelltexte für libtcl, libtk, tclsh, wish sowie Manuals und Beispiele).
Warum Tcl/Tk?
einheitliche interpretative Sprache zur Steuerung aller Aspekte interaktiver Applikationen (Funktionalität, Interfaces, Zusammenspiel der Komponenten, Kommunikation)
effiziente Interpretierbarkeit, einfache Syntax, Programmierbarkeit und einfaches Interface zu C-Funktionen
Vereinfachung und Effektivierung der X-Programmierung durch Tcl-Scripts statt C-Code
In seinem Paper "Scripting: Higher Level Programming for the 21st Century" ( http://www.scriptics.com/people/john.ousterhout/scripting.html) erläutert Ousterhout, welche Rolle Script-Sprachen wie Tcl und Perl seiner Meinung nach in Zukunft spielen werden.
Ähnlichkeiten zu Shell, C, Lisp, Perl
verfügt über Variablen, Prozeduren, Listen, Ausdrücke, Schleifen
primärer Datentyp: String.
Dies ermöglicht, daß Programme und Daten ihre Rollen
vertauschen können.
einfach erweiterbar: Die von Sun verteilte Tcl-Library enthält den Tcl core, der vom Anwender um die zusätzlich benötigte Funktionalität ergänzt werden kann.
Kommando-Syntax: cmd arg arg ...
Bsp.:
set a 2
set b 3; expr 4+7
Kommentare beginnen mit #
wichtige syntaktische Aspekte:
Substitutionen
Variablensubstitution: set b $a
Kommandosubstitution: set a [ expr $a+2 ]
Backslash: set a 1\ 2
Quoting
mit \:
set c \$a\ \[x\]
mit ":
set c "$a, [ expr 1+1 ] und \" "
mit {}:
set a {a {b c} d}
Erweiterung der Funktionalität des Tcl core:
Tcl-Prozeduren
proc sum args { set s 0; foreach i $args { incr s $i } return $s }
C-Prozeduren
Subprozesse
exec fgrep main a.c | wc
verfügt über Tcl- und C-Schnittstelle; durch Tcl sehr komfortabel und effizient für Programmierer
enthält typische Objekte mit Motif-ähnlichem Look&Feel: Label, Button, Canvas, Frame, Menu ...
Ab Release 8.0 wird auch ein Native Look&Feel für Macintosh- und Windows-Systeme unterstützt.
Canvas bietet umfangreiche Unterstützung bei Zeichenfunktionen (wesentlich einfacher als Xlib)
Interpreter wish für Tk Scripts
Objektorientierung kein zentrales Konzept; Ziel ist Komposition und nicht Ableitung/Vererbung
grundlegende Konzepte:
Pfadnamen für Widgets/Windows: .frame.label
pro Widget-Klasse gleichnamiger ,,Konstruktor``:
label .frame.label
verschiedene Geometrie-Manager: Placer, Packer und (in neueren Versionen) Grid
place .frame.label -x 0 -y 0
pack .frame.label -side bottom
Widget-Manipulation mit dynamisch erzeugten Widget-Kommandos:
.frame.label configure -text X
Tcl genutzt für:
Interface-Gestaltung
Callbacks (z.B. für Zusammenspiel Scrollbar und Listbox)
Event bindings
Selection, Focus, Kommunikation mit dem Window Manager
C genutzt für:
neue Widgets
neue Geometrie-Manager
leistungsfähige Kommunikation zwischen Tk-Applikationen (wesentlich stärker als X11-Selections) durch send. Damit können Tcl-Scripts in entfernten Applikationen ausgeführt werden.
Achtung: Die entfernte Programm-Ausführung stellt potentiell ein großes Sicherheitsrisiko dar.
Liste der Zusatzpakete ist relativ groß
verschiedene nützliche Erweiterungen wurden sogar in neuere Releases der Tcl/Tk-Distribution integriert
Tcl/Tk hat sehr weite Verbreitung gefunden
einige wenige Beispiele:
Kommunikation unter Nutzung von TCP und UDP
RPC
verteilte Objekte
Stabile Releases:
Tcl 8.3.2
Tk 8.3.2
TclX 8.2.0
Verfügbarkeit auf /uni/global
Tcl/Tk 8.0.3 und TclX 8.0.3 stehen unter /uni/global für folgende Plattformen zur Verfügung:
linux2 (Libc und Glibc)
sun5
sun4
hp1ux10
hp2ux10
sgi400
tclsh bzw. tclsh8.0,
wish bzw. wish8.0 sowie
wishx, tcl und tclhelp,
Hinweis zur Plattform sun5 (Betriebssystem Solaris 2.x):
Hier stehen auch die neueren Versionen Tcl 8.3.2 und Tk 8.3.2 zur Verfügung. Die Werkzeuge dieser Pakete sind folgendermaßen über /uni/global/bin erreichbar:Die Paket-Pfade für Tcl/Tk 8.3.2 lauten
tclsh8.3
wish8.3
/uni/global/packages/tcl-8.x
/uni/global/packages/tk-8.x
Auf die Online-Manuals, Bibliotheken und Header-Dateien kann man dagegen nur über die Paket-Pfade zugreifen:
/uni/global/packages/tcl-8.0
/uni/global/packages/tk-8.0
/uni/global/packages/tclX-8.0
export MANPATH=/uni/global/packages/tcl-8.0/man:$PATH (bei bash und ähnlichen Shells) setenv MANPATH /uni/global/packages/tcl-8.0/man\:$PATH (bei tcsh und ähnlichen Shells)Hinweis und Anmerkungen
Das Kommando tclhelp bietet einen fensterorientierten Zugang zu den Manual-Seiten. Hierfür benötigt man X11.
Frank Richter hat eine HTML-Version der Manuals für Tcl 8.0 und Tk 8.0 lokal auf unserem WWW-Server installiert.
Unter Linux bewirkt der Aufruf der Tcl/Tk-Werkzeuge über /uni/global/bin jeweils den Start eines kleinen Shell-Skripts namens common_wrapper, dessen Aufgabe darin besteht, je nach Umgebung die Libc- bzw. Glibc-Version des spezifizierten Werkzeugs zu starten. Die Glibc-Version wird nur dann gewählt, wenn im Dateisystem der Eintrag /lib/libc.so.6 existiert. Anderenfalls kommt die Libc-Version zur Ausführung, die auf den meisten Glibc-Systemen ebenfalls laufen sollte.
Eine Synchronisierung der Versionsnummern von Tcl und Tk erfolgte erst mit Version 8.0. Zuvor gehörten z.B. Tcl 7.6 und Tk 4.2 und davor Tcl 7.5 und Tk 4.1 zusammen.
Der wohl stärkste Schnitt in der Historie von Tcl/Tk erfolgte mit dem Übergang auf Tk 4.0. Dieser hatte selbst auf Tcl-Niveau (und natürlich auch auf der darunterliegenden Ebene der C-Schnittstelle) verschiedene Inkompatibilitäten mit älteren Releases zur Folge, so daß leider die meisten existierenden alten Scripts einer mehr oder minder starken Modifikation bedürfen. Es existiert ein spezielles Porting Guide, das die nötigen Änderungen beschreibt.
URLs
Original-FTP-Server für den Tcl/Tk-Kern bei Scriptics: ftp://ftp.scriptics.com/pub/
Mirror-Sites, z.B. ftp://ftp.cs.tubs.de/pub/languages/tcl
John Ousterhouts Scriptics Corporation: http://www.scriptics.com/
Original-FTP-Server für TclX bei Neosoft: ftp://ftp.neosoft.com/languages/tcl/TclX
Literatur
Online-Manuals (Bestandteil jeder Distribution): /uni/global/packages/tcl-*/man/... bzw. Kommando tclhelp
Papers und Bücher:
lokale README-Dateien und Listen der Änderungen an der Software
Unter /uni/global/text/doc/tclX-7.5.1_tk-4.1 finden sich einige mittlerweile schon recht betagte Papers sowie die Drafts zweier älterer Tcl-Bücher in Form von Postscript-Files. Sie beschreiben eher die Grundkonzepte. In ihnen findet man natürlich keine Spezifika der neusten Releases. Dafür empfehlen sich dann die Online-Manuals der jeweils verwendeten Release sowie dazugehörige Beispiel-Programme oder je nach Verfügbarkeit neuere Bücher.
Holger Trapp, 15. Oktober 2000