www.wikidata.de-de.nina.az
Dieser Artikel behandelt die Programmiersprache Zu weiteren Bedeutungen siehe TCL Tcl Aussprache englisch tickle oder auch als Abkurzung fur Tool command language ist eine Open Source Skriptsprache TclLogoSkriptsprache mit Bytecode InterpreterBasisdatenParadigmen imperativ funktional objektorientiertErscheinungsjahr 1988Designer John OusterhoutEntwickler John OusterhoutAktuelle Version 8 6 13 1 22 November 2022 Typisierung schwach dynamischBeeinflusst von Lisp Unix Shell CBetriebssystem Windows Linux macOS Mac OS Classic Solaris weitere Unix Varianten und KloneLizenz BSDTcl Developer SiteTcl wurde ursprunglich ab 1988 von John Ousterhout an der University of California Berkeley als Makrosprache fur ein experimentelles CAD System entwickelt Aus dieser Zeit stammt das Konzept den Tcl Interpreter als Bibliothek in z B ein C Programm einzubinden was auch heute noch moglich ist Die Wahlspruche 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 GUI Toolkit Tk wird als Tcl Tk bezeichnet Inhaltsverzeichnis 1 Grundkonzepte 1 1 Einfache Syntax und Grammatik 1 2 Datentypen 1 3 Zeichenketten 1 4 Erweiterbarkeit 1 5 Selbstmodifizierender Code 1 6 Objektorientierung 1 7 Nebenlaufigkeit 1 8 Bytecode Interpreter 1 9 GUI Schnittstellen 1 10 Weitere Eigenschaften und Besonderheiten 2 Syntax 3 Einsatzbereiche 4 Beispielprogramme 4 1 Ein Hello World Programm 4 2 Mittelwert einer Liste von Zahlen 4 3 Grafische Anwendungsprogrammierung mit Tk 4 4 Datenbankanbindung mit Tcl 5 Erweiterungen 6 Implementierungen 7 Siehe auch 8 Weblinks 9 EinzelnachweiseGrundkonzepte BearbeitenEinfache Syntax und Grammatik Bearbeiten Die Tcl Syntax folgt der polnischen Notation Sie verzichtet auf reservierte Worter ordnet jedoch einigen Zeichen eine feste Bedeutung zu die geschweiften Klammern zur Festlegung von Blocken die eckigen Klammern zur Evaluierung von Ausdrucken die Anfuhrungszeichen zur Abgrenzung von Zeichenketten der Backslash das Doppelkreuz fur Kommentare das Semikolon zum Trennen von Kommandos das ZeilenendeAlle anderen Bestandteile der Sprache konnen umdefiniert werden Zwischen eingebauten und von Programmen oder Tcl Bibliotheken hinzugefugten Funktionen besteht kein Unterschied Datentypen Bearbeiten Tcl ist eine nach aussen hin typlose Sprache Jede Variable hat eine Zeichenkette als Wert Dazu kann eine interne Reprasentation z B einer Ganzzahl Gleitkommazahl Liste Datenstruktur oder Dict treten Die Verwendung einer nicht definierten Variablen fuhrt zu einem Fehler im Gegensatz zur Programmierung mit dem Unix Kommandozeileninterpreter Shell oder awk Konstrukte wie assoziative Arrays Hashtabelle Listen und Dicts werden in Tcl oft angewendet Dicts sind vergleichbar mit JSON jedoch ausser den geschweiften Klammern ohne zusatzliche Sonderzeichen wie Anfuhrungsstriche und Doppelpunkte Daruber hinaus gibt es Objekte mit Klassen Mehrfachvererbung und Mixins Letztere sind genauso wie die Steuerelemente der grafischen Oberflache Tk Kommandos innerhalb von Tcl Zeichenketten Bearbeiten Tcl kennt sehr leistungsfahige Kommandos zur Bearbeitung von auch langen Zeichenketten ebenso Dateibearbeitung TCP IP Netzkommunikation und uber Tk grafische Programmierung und ist in all diesem vollig plattformunabhangig Tcl hat einen Mechanismus eingebaut um mit regularen Ausdrucken zu arbeiten wobei auch komplexere Ausdrucke als die von grep unterstutzt werden vergleichbar mit denen von Perl Erweiterbarkeit Bearbeiten Zur Einbindung externer Bibliotheken besitzt Tcl ein eigenes Paketsystem das diese auch bei Bedarf automatisch nachladen kann Weiterhin ist es moglich Tcl Programme um Bibliotheken zu erweitern die in C oder einer anderen kompilierten Sprache geschrieben sind hierfur existiert in Form der TclStubs eine standardisierte Schnittstelle Ausserdem konnen mithilfe der CriTcl Erweiterung zeitkritische Programmteile in C Quellcode innerhalb des Tcl Quellcodes notiert werden Diese werden automatisch kompiliert und eingebunden Selbstmodifizierender Code Bearbeiten Tcl Programme konnen sich sehr einfach zur Laufzeit selbst modifizieren Da es ohne weiteres moglich ist eigene Kontrollstrukturen in reinem Tcl zu implementieren ist es moglich verschiedene Programmierparadigmen direkt in Tcl umzusetzen zum Beispiel funktionale oder objektorientierte Programmierung Ausserdem kann durch die Selbstmodifizierbarkeit Code aus Konfigurationsdateien oder uber das Netzwerk gelesen und ausgefuhrt werden Um dies in einer sicheren Form zu ermoglichen stellt Tcl eine beliebige Zahl von Sandboxen in Form eigens gestarteter Interpreter mit beschrankter Funktionalitat zur Verfugung Diese Kind Interpreter konnen jeweils mit eigenen Funktionen erweitert werden die uber definierte Schnittstellen mit ihrem Mutter Interpreter kommunizieren Objektorientierung Bearbeiten Tcl enthalt im Kern ab Version 8 6 die bisherige Erweiterung TclOO mit Einfach und Mehrfachvererbung sowie Mixins sodass vollstandig objektorientierte Anwendungen geschrieben werden konnen aber nicht mussen Klassen enthalten Konstruktoren und Destruktoren sowie Methoden Im Gegensatz zu anderen Programmiersprachen sind Klassen und Objekte als Kommandos implementiert und mussen explizit mittels destroy zerstort werden was durch Uberwachung von Variablen mittels trace automatisiert werden kann wenn die Variable ihren Gultigkeitsbereich verlasst Da es keine Zeiger gibt wird stattdessen mittels des Objektnamens auf andere Objekte verwiesen Nebenlaufigkeit Bearbeiten Tcl implementiert nach Wunsch auch Nebenlaufigkeit Jeder Thread besitzt einen eigenen Interpreter und damit auch eigene Variablen Ein Thread kann einen anderen Thread beauftragen Kommandos auszufuhren Threads stehen zueinander in Eltern Kind Beziehung Die Synchronisation erfolgt uber Mutexes oder uber join Eine alternative Implementierung von Nebenlaufigkeit uber Coroutinen steht ab Version 8 6 ebenfalls zur Verfugung Bytecode Interpreter Bearbeiten Tcl Routinen werden vom Interpreter jeweils beim ersten Ausfuhren in Bytecode ubersetzt Beim zweiten Ausfuhren einer Routine steht dann bereits der Bytecode zur Verfugung und der Programmteil lauft schneller Es gibt auch Erweiterungen die den gesamten Quelltext zur Ladezeit des Programms in Bytecode ubersetzen GUI Schnittstellen Bearbeiten Bekannt ist Tcl auch durch das Toolkit Tk mit dem sich plattformunabhangige grafische Benutzeroberflachen leicht programmieren lassen Der grafische Werkzeugkasten Tk steht fur eine Vielzahl von Betriebssystemen mit dem fur das jeweilige System ublichen Aussehen native look and feel zur Verfugung Diese Programmierschnittstelle wird auch fur 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 Bearbeiten Everything is a string Grundsatz Alles ist eine Zeichenkette Auch wenn intern vor allem aus Leistungsgrunden zwischen Zeichenketten Ganzzahlen Fliesskommazahlen Listen und Dicts die Ubersetzung Worterbucher ist unpassend unterschieden wird konnen all diese jederzeit als Zeichenkette angesprochen werden bzw konnen Zeichenketten entsprechenden Inhalts als die spezialisierten Typen angesprochen werden Allerdings kostet die dann implizit durchgefuhrte Konversion Rechenleistung weshalb man darauf achten sollte dieses shimmering zu vermeiden Ereignisgesteuerte Schnittstellen zu Sockets und Dateien so dass auch ohne Threads mit Netzwerkverbindungen und mit der GUI gearbeitet werden kann Zeit und Benutzer definierte Ereignisse sind ebenfalls moglich Variablen Sichtbarkeitsbereich ist auf lokale Variablen begrenzt kann aber mit uplevel und upvar gezielt auf den Sichtbarkeitsbereich der aufrufenden Funktion erweitert werden Einfache Ausnahmebehandlung durch Ausnahme Ruckgabewerte aller Befehle Einfache Erweiterbarkeit in C C Java und Tcl Syntax BearbeitenTcl 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 Kommandowort param1 param2 paramN Anders als bei einfachen Kommandozeileninterpretern kann man in Tcl Kommandos ineinander verschachteln Statt eines Arguments in einem Kommando kann in eckigen Klammern ein weiteres Kommando angegeben werden Die Unterkommandos werden zuerst ausgefuhrt Ihr Resultat wird dann jeweils als Argument im ubergeordneten Kommando eingesetzt Der Mechanismus entspricht dem der Backquotes bei der Unix Shell Kommandowort Unterkommando param Auch Konstrukte wie if und while oder Zuweisungen sind Kommandos Die Kommandos folgen der Polnischen Notation wie bei Lisp und werden ebenfalls als Liste verarbeitet Einsatzbereiche BearbeitenTcl ist in den meisten Unix Installationen bereits vorinstalliert oder lasst sich uber die Paketverwaltung nachinstallieren auch bei Apple macOS nicht jedoch bei Microsoft Windows Fur andere Betriebssysteme einschliesslich Windows bestehen auch verschiedene Installationspakete Tcl ist plattformunabhangig und verhalt sich auf allen Systemen fur welche es vorhanden ist gleich Ublicherweise wird ein Tcl Programm Skript uber die Tcl Shell tclsh fur Programme mit nicht grafischer Ein Ausgabe oder die Tcl Windowing Shell wish fur Programme mit grafischer Benutzeroberflache gestartet 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 fur Prozeduren in der Datenbank PostgreSQL eingesetzt Sie ist uber eine einfache Schnittstelle zu C leicht erweiterbar Beispielprogramme BearbeitenEin Hello World Programm Bearbeiten puts Hello World Hello World Der Befehl puts erwartet eine Zeichenkette als Eingabe und gibt diese direkt aus gefolgt von einem Zeilenumbruch Hier die gleiche Ausgabe unter Verwendung des Befehls zum Setzen eines Variablenwertes set hw Hello World puts hw Hello World Mittelwert einer Liste von Zahlen Bearbeiten 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 ersten Parameter data Inhalt von data mithilfe des zweiten Parameters eine Zeichenkette der Form 5 4 2 1 2 6 7 9 1 0 Diese wird nun in die Stelle eingesetzt an der zuvor der von eckigen Klammern umschlossene join Befehl stand Der Befehl llength gibt die Lange einer Liste zuruck Die eckigen Klammern funktionieren hier genauso Die Funktion double bewirkt dass die Zahlen nicht als Ganzzahl integer mit Rest sondern als Gleitkommazahlen mit Dezimalstellen dividiert werden das ist bei Mittelwerten meist beabsichtigt Es ergibt sich fur 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 Zeichenkettenverarbeitung und Berechnungen gemischt werden konnen um Algorithmen einfach zu formulieren Grafische Anwendungsprogrammierung mit Tk Bearbeiten Tcl macht die Entwicklung grafischer Benutzerschnittstellen sehr einfach Das folgende Mini Programm erstellt eine Schaltflache button im Fenster die beim Anklicken die Anwendung beendet package require Tk pack button b text Goodbye World command exit Zusatzlich zum klassischen Tk Widget Set das sind die Bedienelemente der grafischen Benutzeroberflache das je nach Plattform das Aussehen von Motif Microsoft Windows oder Mac OS Classic simuliert gehort ab Version 8 5 auch das Widget Set Ttk themeable Tk fest zu Tk Dabei kann ein Thema theme aus einer Theme Bibliothek ausgewahlt oder selbst erstellt werden package require Tk ttk setTheme clam pack ttk button b text Goodbye World command exit Datenbankanbindung mit Tcl Bearbeiten Datenbankoperationen sind mit Tcl ebenfalls sehr einfach wie das folgende Beispiel zeigt SQLite3 einbinden package require sqlite3 Datenbank eroffnen sqlite3 meinedatenbank meinedatenbank sqlite Variable zum Referenzieren set var 3 Tabelle erzeugen Fehlermeldung ignorieren meinedatenbank eval CREATE TABLE tabelle1 id int spalteA char 20 Daten in Tabelle schreiben meinedatenbank eval INSERT INTO tabelle1 id spalteA VALUES 1 foo 2 bar 3 ssulz Daten abfragen meinedatenbank eval SELECT FROM tabelle1 WHERE id var ergebnis puts id ergebnis id spalteA ergebnis spalteA Alle Daten loschen meinedatenbank eval DELETE FROM tabelle1 Tabelle loschen meinedatenbank eval DROP TABLE tabelle1 Datenbank schliessen meinedatenbank close Dabei werden Variablenreferenzen nicht expandiert sondern der Datenbank Engine ubergeben so dass keine Sicherheitslucke durch SQL Injection entstehen kann Diese direkte Anwendung der SQLite3 Schnittstelle gilt mittlerweile als veraltet weil es die datenbankunabhangige Schnittstelle TDBC 2 gibt deren Name sich an ODBC und JDBC anlehnt Im Lieferumfang von TDBC sind die Treiber fur SQLite3 MySQL ODBC ahnlich der JDBC ODBC Bridge und PostgreSQL Erweiterungen BearbeitenTcl kann als prozedurale ebenso wie als funktionale Programmiersprache eingesetzt werden da Namen von Funktionen auch Argumente von Funktionen sein konnen Uber Erweiterungen wie stooop Snit Incr Tcl und Incr Tk sowie XOTcl ist Tcl auch objektorientiert bis hin zur Mehrfachvererbung Ab Version 8 6 ist TclOO im Kern enthalten Incr Tcl basiert nun auf TclOO XOTcl ist eine von mehreren objektorientierten Erweiterungen von Tcl die in C geschrieben wurde Es unterstutzt ahnlich wie Common Lisp Object System Metaklassen die Eigenschaften von Klassen definieren und ist eine vollstandig dynamische objektorientierte Sprache Dies bedeutet dass einerseits Definitionen von Klassen und Methoden dynamisch zur Laufzeit anderbar sind und dass andererseits auch die Beziehungen zwischen Objekten und Klassen wie auch zwischen Klassen untereinander jederzeit anderbar sind Dies bedeutet dass beispielsweise ein Objekt seine Klasse andern kann z B ein Objekt der Klasse Auto wird zum Objekt der Klasse Wrack wenn es gegen einen Baum fahrt oder die Klassenhierarchie dynamisch verandert werden kann XOTcl bietet neben den klassischen objektorientierten Konzepten auch Mixin Klassen wobei hier zwischen per object mixins und per class mixins unterschieden wird Durch Mixin Klassen kann man orthogonales Verhalten getrennt implementieren Incr Tcl und Incr Tk sind Pakete objektorientierter Erweiterungen fur Tcl und Tk Diese ermoglichen objektorientierte Programmierung mit Tcl Die Namen lehnen sich an den von C an Die Inkrement Prozedur incr entspricht dem Operator in C Snit Snit s Not Incr Tcl ist ein Paket zur objektorientierten Programmierung mit Tcl welches als reines Tcl Paket nicht kompiliert zu werden braucht Im Gegensatz zu Incr Tcl Vererbung benutzt es das Prinzip der Delegation fur die Realisierung der Objektorientierung Tile Zusatzpaket in Tcl Tk 8 4 und Ttk Standardpaket seit Tcl Tk 8 5 sind Bibliotheken fur graphische Benutzerlemente die ein natives Aussehen auf den unterschiedlichen Betriebssystemen ermoglichen Damit kann auch auf Unix Betriebssystemen Tcl Tk Anwendungen ein modernes Aussehen ermoglicht werden Bei Verwendung der Standard Widgets der Tk Bibliothek benutzen diese die veralteten Motif Elemente Tcl3D ist ein Paket das Tcl um Funktionalitat fur 3D Grafikprogrammierung erweitert Damit lassen sich z B Anzeigeprogramme viewer fur dxf Dateien erstellen Implementierungen BearbeitenDas Tcl Core Team stellt die Referenzimplementierung bereit Hierauf basiert auch die Distribution ActiveTcl 3 Jim tcl ist eine minimalistische Implementierung mit dem Schwerpunkt auf eingebettete Systeme 4 Siehe auch BearbeitenJava Command Language Jacl Weblinks Bearbeiten nbsp Wikibooks Tcl Programmierung Lern und Lehrmaterialien englisch Tcl Tk Hauptseite Englischsprachiges Forum Tcl FAQ Tcl ers Wiki amp Codebeispiele Einfach Tcl Einfach man Tcl kommentierte Sprachregeln Linkkatalog zum Thema Tcl Tk bei curlie org ehemals DMOZ Tcl Coach Deutschsprachige Lernsoftware fur Tcl Tk freeware Projektseite zu Incr Tcl Projektseite zu Snit Deutschsprachiges Buch Einfuhrung in Tcl Tk Einzelnachweise Bearbeiten sourceforge net TDBC Webseite des Anbieters Webseite zur Referenzimplementierung tcl tk WebseiteNormdaten Sachbegriff GND 4361529 6 lobid OGND AKS LCCN sh94000154 Abgerufen von https de wikipedia org w index php title Tcl amp oldid 222758628