Tcl

Tcl
Tcl
Tcl.svg

Skriptsprache mit Bytecode-Interpreter
Basisdaten
Paradigmen: imperativ, funktional, generativ, objektorientiert
Erscheinungsjahr: 1988
Entwickler: John Ousterhout
Aktuelle Version: 8.5.10  (2011-06-24)
Einflüsse: LISP, Unix-Shell, C
Betriebssystem: Windows, Linux, Mac OS, Mac OS X, Solaris, weitere Unix-Varianten und Klone
Lizenz: BSD
Tcl Developer Exchange

Tcl (Aussprache engl. tickle oder auch als Abkürzung für Tool command language) ist eine Open Source-Skriptsprache.

Tcl wurde ursprünglich ab 1988 von John Ousterhout an der University of California, Berkeley als Makrosprache für ein experimentelles CAD-System entwickelt. Aus dieser Zeit stammt das Konzept, den Tcl-Interpreter als Library in z. B. ein C-Programm einzubinden, was auch noch heute möglich ist.

Die Wahlsprüche von Tcl lauten: „radically simple“, also „radikal einfach“, was sich insbesondere auf die Syntax der Sprache bezieht und „everything is a string“, „Alles ist Text“, was sich auf den Umgang mit Befehlen und Daten in Tcl bezieht.

Die verbreitete Kombination aus Tcl und dem Tk-Toolkit wird als Tcl/Tk bezeichnet.

Inhaltsverzeichnis

Grundkonzepte

Einfache Syntax und Grammatik

Die Tcl-Syntax folgt der polnischen Notation. Sie verzichtet auf reservierte Wörter, ordnet jedoch einigen Zeichen eine feste Bedeutung zu:

  • die geschweiften Klammern zur Festlegung von Blöcken,
  • die eckigen Klammern zur Evaluation von Ausdrücken,
  • die Anführungszeichen zur Abgrenzung von Strings,
  • der Backslash,
  • das Doppelkreuz für Kommentare,
  • das Semikolon zum Trennen von Kommandos und
  • das Zeilenende.

Alle anderen Bestandteile der Sprache können umdefiniert werden. Zwischen eingebauten und von Programmen oder Tcl-Libraries hinzugefügten Funktionen besteht kein Unterschied.

Erweiterbarkeit

Zur Einbindung externer Bibliotheken besitzt Tcl ein eigenes Paketsystem, das diese auch bei Bedarf automatisch nachladen kann. Weiterhin ist es möglich, Tcl-Programme um Bibliotheken zu erweitern, die in C oder einer anderen kompilierten Sprache geschrieben sind; hierfür existiert in Form der TclStubs eine standardisierte Schnittstelle. Außerdem können mithilfe der CriTcl-Erweiterung zeitkritische Programmteile in C-Quellcode innerhalb des Tcl-Quellcodes notiert werden. Diese werden automatisch kompiliert und eingebunden.

Selbstmodifizierender Code

Tcl-Programme können sich sehr einfach zur Laufzeit selbst modifizieren. Da es ohne weiteres möglich ist, eigene Kontrollstrukturen in reinem Tcl zu implementieren, ist es möglich, verschiedene Programmierparadigmen direkt in Tcl umzusetzen, zum Beispiel funktionale oder objektorientierte Programmierung.

Außerdem kann durch die Selbstmodifizierbarkeit Code aus Konfigurationsdateien oder über das Netzwerk gelesen und ausgeführt werden. Um dies in einer sicheren Form zu ermöglichen, stellt Tcl eine beliebige Zahl von Sandboxen in Form eigens gestarteter Interpreter mit beschränkter Funktionalität zur Verfügung. Diese Kind-Interpreter können jeweils mit eigenen Funktionen erweitert werden, die über definierte Schnittstellen mit ihrem Mutter-Interpreter kommunizieren.

Nebenläufigkeit

Tcl implementiert nach Wunsch auch Nebenläufigkeit. Jeder Thread besitzt einen eigenen Interpreter. Die Synchronisation erfolgt über eine Erweiterung. Eine alternative Implementierung von Nebenläufigkeit über Coroutinen ist (Stand: Tcl 8.5.5) in der Erprobung.

Bytecode-Compiler

Tcl-Programme werden vom Interpreter jeweils vor dem ersten Ausführen in Bytecode übersetzt. Beim zweiten Ausführen einer Routine steht dann bereits der Bytecode zur Verfügung und der Ablauf geschieht schneller. Es existieren auch Erweiterungen, die den Bytecode bereits zur Ladezeit des Programms verfügbar machen.

GUI-Schnittstellen

Bekannt ist Tcl auch durch das Toolkit Tk, mit dem sich Plattform-unabhängige grafische Benutzeroberflächen leicht programmieren lassen. Der grafische Werkzeugkasten „Tk“ steht für eine Vielzahl von Betriebssystemen mit dem für das jeweilige System üblichen Aussehen („native look and feel“) zur Verfügung. Diese Programmierschnittstelle wird auch für viele weitere Programmiersprachen angeboten, wie z. B. Common Lisp, Perl, PHP, Ruby, Python oder R. Neben der Standard-Schnittstelle zum Tk Toolkit existieren unter anderem auch Schnittstellen zu den Toolkits FLTK und GTK.

Weitere Eigenschaften und Besonderheiten

  • Ereignisgesteuerte Schnittstellen zu Sockets und Dateien. Zeit- und Benutzer-definierte Ereignisse sind ebenfalls möglich.
  • Variablen-Scope auf lokale Variablen begrenzt, kann aber mit uplevel und upvar gezielt auf den Scope der aufrufenden Funktion erweitert werden.
  • Einfache Ausnahmebehandlung durch Ausnahme-Rückgabewerte aller Befehle.
  • Einfache Erweiterbarkeit in C, C++, Java und Tcl.

Syntax

Tcl ist im Grundsatz sehr einfach aufgebaut und grenzt sich gegen Sprachen wie Perl, APL und C durch absolut konsequenten Einsatz einer einheitlichen Syntax ab. Wer mit Kommandozeileninterpretern (Shell, MS-DOS) vertraut ist, kennt auch die Grundstruktur von Tcl-Kommandos. Ein Tcl-Skript besteht aus mehreren Kommandos. Ein Kommando besteht aus einem Kommandowort gefolgt von Argumenten (Parameter). Ein Kommando wird von einem Zeilenende oder Semikolon begrenzt. Gegenüber einfachen Kommandozeileninterpretern verfügt aber Tcl über die Möglichkeit, Kommandos ineinander zu verschachteln. Statt eines Argumentes in einem Kommando kann in eckigen Klammern ein weiteres Kommando angegeben werden. Die Unterkommandos werden zuerst ausgeführt. Ihr Resultat wird dann jeweils als Argument im übergeordneten Kommando eingesetzt. Der Mechanismus entspricht dem der Backquotes bei der Unix-Shell.

Auch Konstrukte wie if und while oder Zuweisungen sind Kommandos. Die Kommandos folgen der Polnischen Notation, wie Lisp. Das Kommandowort steht am Anfang, dann folgen die Parameter:

 KommandoToken  param1 param2 … paramN

Datentypen

Tcl ist eine (nach außen hin) typlose Sprache. Jede Variable hat eine Zeichenkette als Wert. Dazu kann eine interne Repräsentation z. B. einer Ganzzahl, Gleitkommazahl oder Liste treten. Die Verwendung einer nicht definierten Variable führt zu einem Fehler – im Gegensatz zur Programmierung mit dem Unix-Kommandozeileninterpreter (Shell) oder awk. Konstrukte wie assoziative Arrays (Hashtabelle) und Listen werden in Tcl oft angewendet.

Bearbeitung von Zeichenketten

Tcl kennt sehr leistungsfähige Kommandos zur Bearbeitung von (auch langen) Zeichenketten – mindestens ebenbürtig denen von Perl und Python – , ebenso Dateibearbeitung, TCP/IP-Netzkommunikation und über Tk grafische Programmierung und ist in all diesem völlig plattformunabhängig. Tcl hat einen Mechanismus eingebaut, um mit regulären Ausdrücken arbeiten zu können, wobei auch komplexere Ausdrücke als die von grep unterstützt werden, vergleichbar mit denen von Perl.

Einsatzbereiche

Tcl wird auf der Kommandozeile, als eingebettete Sprache, als CGI-Sprache (wie sonst oft Perl), als Modul im Apache-Webserver (wie sonst oft PHP) und als Sprache für Prozeduren in der Datenbank PostgreSQL eingesetzt. Sie ist über eine einfache Schnittstelle zu C leicht erweiterbar. Tcl kann als prozedurale ebenso wie als funktionale Programmiersprache eingesetzt werden, da Namen von Funktionen auch Argumente von Funktionen sein können. Über Erweiterungen wie stooop, Snit, Incr Tcl und Incr Tk sowie XOTcl ist Tcl auch objektorientiert – bis hin zur Mehrfachvererbung.

Beispielprogramme

Ein „Hello World!“ Programm

puts "Hello World!"

Hello World!

Der Befehl puts erwartet einen String als Eingabe und gibt diesen direkt aus, gefolgt von einem Zeilenumbruch. Hier die gleiche Ausgabe unter Verwendung des Befehls zum Setzen eines Variabel-Wertes:

set hw "Hello World!"
puts $hw

Hello World!

Mittelwert einer Liste von Zahlen

proc mean data {expr ([join $data +])/double([llength $data])}

Dies definiert einen neuen Befehl mean, der wie folgt aufgerufen werden kann

mean {5 4.2 1.2 6.7 9 1 0}

data ist also eine Liste von Zahlen. Der Befehl join formt aus seinem 1. Parameter $data (Inhalt von data) mithilfe des 2. Parameters + einen String der Form 5+4.2+1.2+6.7+9+1+0. Dieser String wird nun in die Stelle eingesetzt, an der zuvor der von eckigen Klammern umschlossene join-Befehl stand. Der Befehl llength gibt die Länge einer Liste zurück. Die eckigen Klammern funktionieren hier genauso. Die Funktion double() bewirkt, dass die Zahlen nicht als Integer mit Rest, sondern als Gleitkommazahlen mit Dezimalstellen dividiert werden (das ist bei Mittelwerten in der Regel beabsichtigt).

Es ergibt sich für das Beispiel:

expr (5+4.2+1.2+6.7+9+1+0)/double(7)

Der Befehl expr berechnet nun den mathematischen Ausdruck.

Das Beispiel zeigt, wie einfach in Tcl Stringverarbeitung und Berechnungen gemischt werden können, um Algorithmen prägnant zu formulieren.

Grafische Anwendungsprogrammierung mit Tk

Tcl macht die Entwicklung grafischer Benutzerschnittstellen sehr einfach: Das folgende Mini-Programm erstellt einen Button im Fenster, der beim Anklicken die Anwendung beendet.

package require Tk
pack [button .b -text "Goodbye World" -command exit]

Zusätzlich zum klassischen Tk-Widget-Set, das je nach Plattform das Aussehen von Motif, MS-Windows, oder MacOS-Classic simuliert, gehört seit Version 8.5 auch das Widget-Set Tile fest zu Tk. Dabei kann ein Theme aus einer Theme-Bibliothek ausgewählt oder selbst erstellt werden.

package require Tk
ttk::setTheme clam
pack [ttk::button .b -text "Goodbye World" -command exit]

Erweiterungen

XOTcl

XOTcl ist eine von mehreren objektorientierten Erweiterungen von Tcl, die in C geschrieben wurde. XOTcl unterstützt ähnlich wie Common Lisp Object System Metaklassen, die Eigenschaften von Klassen definieren.

XOTcl ist eine vollständig dynamische objektorientierte Sprache. Dies bedeutet, dass einerseits Definitionen von Klassen und Methoden dynamisch (zur Laufzeit) änderbar sind, und dass andererseits auch die Beziehungen zwischen Objekten und Klassen wie auch zwischen Klassen untereinander jederzeit änderbar sind. Dies bedeutet, dass beispielsweise ein Objekt seine Klasse ändern kann (z. B. ein Objekt der Klasse „Auto“ wird zum Objekt der Klasse „Wrack“, wenn es gegen einen Baum fährt), oder die Klassenhierarchie dynamisch verändert werden kann.

XOTcl verfügt neben den klassischen objektorientierten Konzepten auch über so genannten Mixin-Klassen, wobei hier zwischen per-object-mixins und per-class-mixins unterschieden wird. Durch Mixin-Klassen ist es möglich, orthogonales Verhalten getrennt zu implementieren.

Die Klasse Safety kann nun genutzt werden, um einen sicheren Stapel s2 zu erzeugen. Wir erzeugen eine weitere Instanz der Klasse Stack namens s2 und mischen in diese Instanz als per-object mixin die Klasse Safety ein. Versucht man nun aus dem leeren Stack ein weiteres Element zu ziehen, erscheint nun die Fehlermeldung „Stack empty!“.

Incr Tcl

Incr Tcl und Incr Tk sind Pakete von objektorientierten Erweiterungen für Tcl und Tk. Diese ermöglichen objektorientierte Programmierung mit Tcl. Die Namen lehnen sich an den von C++ an. Die Inkrement-Prozedur incr entspricht dem ++-Operator in C.

Literatur: „incr Tcl from the Ground Up“ von Chad Smith

Snit

Snit ("Snit's Not Incr Tcl") ist ein Paket zur objektorientierten Programmierung mit Tcl, welches als reines Tcl-Paket nicht kompiliert werden muss. Im Gegensatz zu Incr Tcl (Vererbung) benutzt es das Prinzip der Delegation für die Realisierung der Objektorientierung.

Tile/Ttk

Tile, Zusatzpaket in Tcl/Tk 8.4, und Ttk, Standardpaket seit Tcl/Tk 8.5, sind Bibliotheken für graphische Benutzerlemente die ein natives Aussehen auf den verschiedenen Betriebssystemen ermöglichen. Damit kann auch auf Unix-Betriebssystemen Tcl/Tk-Anwendungen ein modernes Aussehen ermöglicht werden. Bei Verwendung der Standard-Widgets der Tk-Bibliothek benutzen diese die veralteten Motif-Elemente.

Tcl3D

Tcl3D ist ein Paket, das Tcl um Funktionalität für 3D Grafikprogrammierung erweitert. Damit lassen sich z. B Viewer für .dxf Dateien bauen.

Aufruf

Tcl ist in den meisten Unix-Installationen bereits vorinstalliert. Für andere Betriebssysteme bestehen auch verschiedene Installationspakete.

Tcl ist plattformunabhängig und verhält sich auf allen Systemen, für welche es vorhanden ist, gleich.

Üblicherweise wird ein Tcl-Programm (Skript) über die Tcl-Shell tclsh für Programme mit nicht-grafischer Ein-/Ausgabe oder die Tcl-Windowing-Shell wish für Programme mit grafischer Benutzeroberfläche gestartet.

Siehe auch

Weblinks

Wikibooks Wikibooks: Tcl-Programmierung (englisch) – Lern- und Lehrmaterialien

Wikimedia Foundation.

Игры ⚽ Поможем написать курсовую

Schlagen Sie auch in anderen Wörterbüchern nach:

  • TCL — Семантика: императивный, скриптовый Тип исполнения: интерпретатор Появился в: 1988 г. Автор(ы): Джон Остераут Последняя версия: 8.5.7 / 15 апреля 2009 …   Википедия

  • Tcl — Tool Command Language Desarrollador(es) Tcl Core Team[1] …   Wikipedia Español

  • TCL — Skriptsprache mit Bytecode Interpreter Basisdaten Paradigmen: imperativ, funktional …   Deutsch Wikipedia

  • Tcl/Tk — Tcl Skriptsprache mit Bytecode Interpreter Basisdaten Paradigmen: imperativ, funktional …   Deutsch Wikipedia

  • TCL — may mean:*Computer languages ** Tcl (Tool Command Language), a computer programming language ** Terminal Control Language , used to program VeriFone devices ** Terminal Control Language , a Pick operating system command language ** Trader… …   Wikipedia

  • Tcl — Cette page d’homonymie répertorie les différents sujets et articles partageant un même nom. {{{image}}}   Sigles d une seule lettre   Sigles de deux lettres > Sigles de trois lettres …   Wikipédia en Français

  • TCL — (pronunciado /tí.quel/, originado del acrónimo en inglés Tool Command Language o lenguaje de herramientas de comando, actualmente se escribe como Tcl en lugar de TCL ), es un lenguaje de script creado por John Ousterhout, que ha sido concebido… …   Enciclopedia Universal

  • TCL — (Tool Command Language) interpreted programming language used to develop prototype applications and CGI scripts (Computers) …   English contemporary dictionary

  • TCL/TK — Tool Command Language Pour les articles homonymes, voir Tcl. Apparu en 1988 …   Wikipédia en Français

  • Tcl/Tk — Tool Command Language Pour les articles homonymes, voir Tcl. Apparu en 1988 …   Wikipédia en Français

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”