ΗTcl (αρχικά των αγγλικών λέξεων "Tool Command Language", "Γλώσσα Εντολών Εργαλείων", συνήθως εμφανίζεται ως "Tcl" ή "TCL") είναι μιαγλώσσα προγραμματισμού σεναρίων που δημιουργήθηκε από τον John Ousterhout.[1] Σύμφωνα με αυτόν, "δημιουργήθηκε λόγω απογοήτευσης"[2] και, ενώ οι προγραμματιστές δημιουργούσαν τις δικές τους γλώσσες, τις οποίες στη συνέχεια ενσωμάτωναν σε εφαρμογές, η Tcl έγινε αποδεκτή από μόνη της. Συχνά χρησιμοποιείται για γρήγορη ανάπτυξη εφαρμογών (rapid application development/rapid prototyping), εφαρμογές σεναρίων, γραφικές διεπαφές και δοκιμές λογισμικού. Η Tcl χρησιμοποιείται σε πλατφόρμες ενσωματωμένων συστημάτων, τόσο στην πλήρη της έκδοση, όσο και σε διάφορες άλλες εκδόσεις με μικρότερες απαιτήσεις.
Ο συνδυασμός της Tcl με τη γραφική εργαλειοθήκηTk ονομάζεταιTcl/Tk.
Πρώτο συνέδριο Tcl/Tk (Μπέρκλεϊ). Σε αυτό ανακοινώνονται ο διαχειριστής γεωμετρίας [table] (πρόδρομος του [grid]), το σύστημα [incr Tcl], το TclDP και το Groupkit.
Αύγουστος 1997
Η Tcl 8.0 αρχίζει να χρησιμοποιεί μεταγλωττιστή κώδικα byte (bytecode).
Απρίλιος 1999
Η Tcl 8.1 έχει πλήρη υποστήριξη Unicode.
Αύγουστος 2000
Σχηματίζεται η Βασική Ομάδα της Tcl (Tcl Core Team) και το μοντέλο ανάπτυξης της Tcl έρχεται πιο κοντά στην κοινότητα.
Σεπτέμβριος 2002
Ένατο συνέδριο Tcl/Tk (Βανκούβερ). Ανακοινώνεται το σύστημα πακέτων starkit. Κυκλοφορεί η Tcl 8.4.0.
Δεκέμβριος 2007
Η Tcl 8.5 προσθέτει νέους τύπους δεδομένων, ένα νέο αποθετήριο επεκτάσεων (extension repository), μεγάλους αριθμούς (bignums) καιλ-εκφράσεις (lambdas).
Τα συνέδρια της Tcl γίνονται και στις Ηνωμένες Πολιτείες και στην Ευρώπη.
Υπάρχει διεπαφή καθοδηγούμενη από τα γεγονότα (event-driven interface) γιαsockets καιαρχεία. Μπορούν επίσης να χρησιμοποιηθούν χρονικά γεγονότα ή γεγονότα που ορίζονται από τον χρήστη.
Η προεπιλεγμένη ορατότητα μιας μεταβλητής περιορίζεται σε λεξική (στατική) εμβέλεια, αλλά οι εντολές uplevel και upvar επιτρέπουν την αλληλεπίδραση με εμβέλειες που βρίσκονται σε κάποια εξωτερική περιέχουσα συνάρτηση.
Όλες οι εντολές που ορίζονται από την ίδια την Tcl εμφανίζουν μηνύματα λάθους αν δεν χρησιμοποιηθούν σωστά.
Δυνατότητες επέκτασης (extensibility) μέσωC,C++,Java και Tcl.
Η γλώσσα εκτελείται από ένανδιερμηνέα με τη χρήση κώδικα byte (bytecode)
Πλήρης υποστήριξη του προτύπουUnicode (3.1), από το 1999.
άδειεςBSD, με τη διανομή του πηγαίου κώδικα να είναι ελεύθερη.
Αρχικά η Tcl δεν υποστήριζεαντικειμενοστρεφή σύνταξη πριν την έκδοση 8.6[3], και η αντικειμενοστρεφής λειτουργικότητα χρειαζόταν εξωτερικά πακέτα, όπως το incr Tcl και το XOTcl. Υπάρχουν επίσης πακέτα αντικειμενοστρεφούς προγραμματισμού που βασίζονται αμιγώς στα σενάρια, όπως το Snit και το STOOOP.
Η Safe-Tcl ("Ασφαλής-Tcl") είναι υποσύνολο της Tcl με περιορισμένα χαρακτηριστικά. Η πρόσβαση στοσύστημα αρχείων είναι περιορισμένη και απαγορεύεται η εκτέλεση κάποιων εντολών του συστήματος. Χρησιμοποιεί ένα διπλό μοντέλο διερμηνείας, με έναν "μη αξιόπιστο διερμηνέα" να εκτελεί τον κώδικα σεναρίων που δεν θεωρούνται αξιόπιστα. Δημιουργοί της ήταν ο Ναθάνιελ Μπόρενσταϊν και ο Μάρσαλ Ρόουζ, που είχαν σκοπό να συμπεριλαμβάνουν ενεργά μηνύματα σεe-mail. Η Safe-Tcl μπορεί να είναι μέρος ενός e-mail όταν υποστηρίζονται οιμηχανισμοίapplication/safe-tcl καιmultipart/enabled-mail. Η λειτουργικότητα της Safe-Tcl αποτελεί πια μέρος της ίδιας της Tcl/Tks.[4][5]
Ένα σενάριο Tcl αποτελείται από πολλές κλήσεις εντολών. Μια κλήση εντολής είναι μια λίστα λέξεων που χωρίζονται από κενό και μετά την τελευταία υπάρχει αλλαγή γραμμής ή ελληνικό ερωτηματικό.
λέξη0 λέξη1 λέξη2 ... λέξηN
Η πρώτη λέξη είναι το όνομα της εντολής, που δεν ανήκει στη γλώσσα αλλά στη βιβλιοθήκη. Οι επόμενες λέξεις είναι τα ορίσματα, άρα η δομή είναι:
όνομαΕντολής όρισμα1 όρισμα2 ... όρισμαN
Για παράδειγμα, η εντολήputs τυπώνει μια συμβολοσειρά και μια αλλαγή γραμμής, από προεπιλογή στην πρότυπη έξοδο (stdout):
puts"Γεια σου, κόσμε!"
Οι μεταβλητές και τα αποτελέσματα άλλων εντολών μπορούν επίσης να αντικαταστήσουν μέρη άλλων συμβολοσειρών, όπως στο παρακάτω παράδειγμα όπου ηset και ηexpr αποθηκεύουν το αποτέλεσμα ενός υπολογισμού σε μια μεταβλητή και ηputs το τυπώνει μαζί με ένα επεξηγηματικό κείμενο:
setsum[expr1+2+3+4+5]puts"The sum of the numbers 1..5 is $sum."
Οι λέξεις γράφονται είτε όπως είναι, είτε σε διπλά εισαγωγικά (ώστε να μπορούν να περιέχουν κενούς χαρακτήρες), είτε μέσα σε αγκύλες, οι οποίες απαγορεύουν τις αντικαταστάσεις. Σε απλές λέξεις και σε λέξεις σε διπλά εισαγωγικά, μπορούν να συμβούν τρεις τύποι αντικατάστασης (που γίνονται από τα αριστερά προς τα δεξιά):
Αντικατάσταση εντολής (command substitution), η οποία αντικαθιστά ό,τι περιέχεται σε τετράγωνες αγκύλες με το αποτέλεσμα του σεναρίου που βρισκόταν εκεί. Για παράδειγμα, Η "[expr 1+2+3]" αντικαθίσταται από το αποτέλεσμα της αποτίμησης της έκφρασης (που είναι 6), γιατί αυτή είναι η λειτουργία της εντολήςexpr.
Αντικατάσταση μεταβλητής (variable substitution), η οποία αντικαθιστά ένα σύμβολο δολαρίου που ακολουθείται από το ονομα μιας μεταβλητής με τα περιεχόμενα της μεταβλητής. Για παράδειγμα, η "$foo" αντικαθίσταται από τα περιεχόμενα της μεταβλητής με όνομα "foo". Το όνομα της μεταβλητής μπορεί να περικλείεται σε αγκύλες, όταν το όνομα της μεταβλητής μπορεί να ερμηνευτεί με πολλούς τρόπους.
Αντικατάσταση καθέτου (backslash substitution), η οποία αντικαθιστά μια κάθετο που ακολουθείται από ένα γράμμα, από έναν άλλο χαρακτήρα. Για παράδειγμα, η "\n" αντικαθίσταται με χαρακτήρα αλλαγής γραμμής.
Από την Tcl 8.5, κάθε λέξη μπορεί να αρχίζει με "{*}", το οποίο τεμαχίζει τη λέξη στις υπο-λέξεις που την απαρτίζουν, για την κατασκευή μιας εντολής, λειτουργία που μοιάζει με την ακολουθία ",@" του χαρακτηριστικού ημι-παράθεσης (quasiquote) τηςLisp.
Αποτέλεσμα αυτών των κανόνων είναι κάθε αποτέλεσμα μιας εντολής να μπορεί να χρησιμοποιηθεί σαν όρισμα σε άλλη εντολή. Επίσης δεν υπάρχει τελεστής συνένωσης συμβολοσειρών, η γλώσσα συνενώνει απευθείας με απλή παράθεση των συμβολοσειρών που πρόκειται να συνενωθούν. Σε αντίθεση με τοκέλυφος Bourne, η Tcl δεν αναλύει συντακτικά δεύτερη φορά κάποια συμβολοσειρά, εκτός και αν ο χρήστης το δηλώσει ρητά, με αποτέλεσμα η αλληλεπιδραστική χρήση να γίνεται πιο δύσκολη αλλά η χρήση στα σενάρια πιο προβλέψιμη (για παράδειγμα, η χρήση κενών στα ονόματα αρχείων δεν προκαλεί προβλήματα).
Υπάρχει δηλαδή μια βασική δομή, η εντολή, και κάποιοι απλοί κανόνες αντικατάστασης. Το μονό σύμβολο ισότητας (=) για παράδειγμα δεν χρησιμοποιείται καθόλου, και το διπλό σύμβολο ισότητας (==) είναι ο έλεγχος ισότητας, ενώ χρησιμοποιείται μόνο σε περιπτώσεις όπως η εντολήexpr ή το πρώτο όρισμα τηςif. (Και οι δύο αυτές εντολές είναι απλά μέρος της πρότυπης βιβλιοθήκης: δεν έχουν κάποιο ιδιαίτερο ρόλο αλλά μπορούν να αντικατασταθούν από τον χρήστη.)
Οι περισσότερες εντολές της Tcl, ειδικά στην πρότυπη βιβλιοθήκη, παίρνουν μεταβλητό αριθμό ορισμάτων (είναιvariadic συναρτήσεις), και ηproc (ο κατασκευαστής διαδικασιών εντολών σεναρίων) υποστηρίζει τον ορισμό προεπιλεγμένων τιμών για τα ορίσματα και ένα γενικό όρισμα που τα καλύπτει όλα (catch-all), ώστε ο κώδικας να μπορεί να επεξεργαστεί οποιονδήποτε αριθμό ορισμάτων.
Η Tcl δεν έχειστατικούς τύπους: κάθε μεταβλητή μπορεί να περιέχει ακεραίους, αριθμούς κινητής υποδιαστολής, συμβολοσειρές, λίστες, ονόματα εντολών, λεξικά (dictionaries), ή οποιαδήποτε άλλη τιμή - οι τιμές διερμηνεύονται πάλι (ανάλογα με τους συντακτικούς περιορισμούς) σαν να ανήκουν σε διαφορετικούς τύπους, ανάλογα με το τι ζητείται κάθε φορά. Παρόλα αυτά, οι τιμές είναι αμετάβλητες (immutable): όταν μια λειτουργία φαίνεται να τις τροποποιεί, στην πραγματικότητα επιστρέφει μια νέα, διαφορετική τιμή.
Η Tcl περιλαμβάνει απευθείας διεπαφή για τη γλώσσαC.Αυτό οφείλεται στο ότι αρχικά η γλώσσα γράφτηκε για να είναι ένα πλαίσιο ανάπτυξης (framework) που να παρέχει ένα συντακτικό εμπρόσθιο τμήμα σε εντολές που είχαν γραφτεί σε C, και όλες οι εντολές της γλώσσας (συμπεριλαμβανομένων και αυτών που σε άλλη περίπτωση θα ήταν λέξεις-κλειδιά (keyword), όπως ηif ή ηwhile) υλοποιούνται με αυτόν τον τρόπο. Κάθε υλοποίηση εντολής είναι μια συνάρτηση που δέχεται έναν πίνακα από τιμές που περιγράφουν τα ορίσματα της εντολής (τα οποία έχουν ήδη αντικατασταθεί) και μπορεί να ερμηνεύσει αυτές τις τιμές με οποιονδήποτε τρόπο είναι επιθυμητός.
Οι προσομοιωτές ψηφιακής λογικής (digital logic simulators) συχνά περιλαμβάνουν μια διεπαφή συγγραφής σεναρίων σε Tcl για την προσομοίωση τωνγλωσσών υλικούVerilog,VHDL και SystemVerilog.
Υπάρχουν εργαλεία όπως τοSWIG και τοffidl που δημιουργούν αυτόματα τον απαραίτητο κώδικα για σύνδεση κάποιων συναρτήσεων σε C με τη βιβλιοθήκη χρόνου εκτέλεσης (runtime) της Tcl, ενώ τοCritcl κάνει το αντίστροφο, επιτρέποντας την ενσωμάτωση κώδικα C μέσα σε ένα σενάριο Tcl και στη συνέχεια μεταγλωττίζοντάς το στονχρόνο εκτέλεσης σεDLL.
Η Tcl πάντα υποστήριζε πακέτα επεκτάσεων, τα οποία προσθέτουν λειτουργικότητα όπωςγραφικές διεπαφές χρήστη (GUI), αυτοματοποίηση εφαρμογών σε περιβάλλον τερματικού, πρόσβαση σεβάσεις δεδομένων και άλλες δυνατότητες.
Η πιο δημοφιλής επέκταση της Tcl είναι η εργαλειοθήκηTk, η οποία παρέχει μια βιβλιοθήκη για χειρισμό της γραφικής διεπιφάνειας χρήστη σε διάφοραλειτουργικά συστήματα. Κάθε τέτοια διεπαφή αποτελείται από ένα ή περισσότεραπλαίσια (frames) και κάθε πλαίσιο έχει έναν διαχειριστή διάταξης (layout manager).
Μια από τις δημοφιλέστερες επεκτάσεις της Tcl είναι τοExpect. Αρχικά το Expect είχε στενή σχέση με την Tcl, κάτι που έπαιξε σημαντικό ρόλο στην επιτυχία της Tcl σε πεδία όπως οι δομικές στο (testing) στο Unix, όπου το Expect χρησιμοποιήθηκε (και ακόμα χρησιμοποιείται) με επιτυχία στην αυτοματοποίηση συνεδριώνtelnet,ssh καισειριακής θύρας για την εκτέλεση επαναλαμβανόμενων εργασιών (π.χ. για σενάρια ελέγχου εφαρμογών που δέχονται είσοδο από τον χρήστη). Η Tcl ήταν ο μόνος τρόπος να εκτελεστεί το Expect και η Tcl έγινε πολύ δημοφιλής σε αυτές τις εφαρμογές.
ΗTile/Ttk είναι μια συλλογή από χρωματικούς συνδυασμούς και στυλ για γραφικά συστατικά, η οποία μπορεί να αντικαταστήσει τα περισσότερα γραφικά συστατικά του Tk με τις αντίστοιχες εκδόσεις κάθε πλατφόρμας, καλώντας τοAPI τουλειτουργικού συστήματος. Καλύπτονται τα χρώματα και το στυλ τωνWindows XP, των κλασικώνWindows (Windows Classic), της εργαλειοθήκηςQt (στην οποία βασίζονται οι βιβλιοθήκες του περιβάλλοντοςKDE τουX11) και τουAqua (Mac OS X). Μπορεί επίσης να χρησιμοποιηθεί για τη δημιουργία κάποιου νέου στυλ, με χρήση ορισμών γραφικών συστατικών σε συνδυασμό με εικόνες (pixmaps). Παραδείγματα αποτελούν τα στυλ Classic Tk, Step, Alt/Revitalized, Plastik και Keramik.
Στην Tcl 8.4, το πακέτο αυτό ονομάζεται Tile, ενώ στην Tcl 8.5 ανήκει στη βασική διανομή του Tk (με το όνομα Ttk).
Το Tix, ή Επέκταση Διεπαφής Tk (Tk Interface eXtension), είναι ένα ισχυρό σύνολο από γραφικά συστατικά διεπιφάνειας χρήστη που επεκτείνει τις δυνατότητες των εφαρμογών σε Tcl/Tk και Python. Η χρήση του Tix μαζί με το Tk μπορεί να βελτιώσει σημαντικά την εμφάνιση και τη λειτουργικότητα μιας εφαρμογής.
Το Tix είναι λογισμικό ανοιχτού κώδικα που συντηρείται από τους εθελοντές του Tix Project Group. Οπηγαίος κώδικας διανέμεται ελεύθερα με την άδεια λογισμικούBSD.
Το Itcl είναι ένα σύστημααντικειμένων για την Tcl και συχνά συναντάται και ως [incr Tcl] (αναφορά στον τρόπο με τον οποίο αυξάνεται κατά ένα η τιμή μιας μεταβλητής στην Tcl, ονομασία που μοιάζει με αυτήν της C++).
Το Tcl Database Connectivity (TDBC), που αποτελεί μέρος της Tcl 8.6, είναι μια κοινή διεπαφή πρόσβασης σεβάσεις δεδομένων που μπορεί να χρησιμοποιηθεί από σενάρια σε Tcl. Υποστηρίζει οδηγούς για πρόσβαση σε βάσεις δεδομένωνMySQL,ODBC,PostgreSQL καιSQLite, ενώ περισσότερες αναμένονται στο μέλλον.
Η πρόσβαση σε βάσεις δεδομένων υποστηρίζεται επίσης μέσα από εξειδικευμένες επεκτάσεις για κάθε βάση δεδομένων.