Η Tcl (αρχικά των αγγλικών λέξεων "Tool Command Language", "Γλώσσα Εντολών Εργαλείων", συνήθως εμφανίζεται ως "Tcl" ή "TCL") είναι μια γλώσσα προγραμματισμού σεναρίων που δημιουργήθηκε από τον John Ousterhout.[1] Σύμφωνα με αυτόν, "δημιουργήθηκε λόγω απογοήτευσης"[2] και, ενώ οι προγραμματιστές δημιουργούσαν τις δικές τους γλώσσες, τις οποίες στη συνέχεια ενσωμάτωναν σε εφαρμογές, η Tcl έγινε αποδεκτή από μόνη της. Συχνά χρησιμοποιείται για γρήγορη ανάπτυξη εφαρμογών (rapid application development/rapid prototyping), εφαρμογές σεναρίων, γραφικές διεπαφές και δοκιμές λογισμικού. Η Tcl χρησιμοποιείται σε πλατφόρμες ενσωματωμένων συστημάτων, τόσο στην πλήρη της έκδοση, όσο και σε διάφορες άλλες εκδόσεις με μικρότερες απαιτήσεις.
Ο συνδυασμός της Tcl με τη γραφική εργαλειοθήκη Tk ονομάζεται Tcl/Tk.
Η γλώσσα προγραμματισμού Tcl δημιουργήθηκε την άνοιξη του 1988 από τον John Ousterhout, όταν δούλευε στο Πανεπιστήμιο της Καλιφόρνια, στο Μπέρκλεϊ.
Ημερομηνία | Γεγονός |
---|---|
Ιανουάριος 1990 | Η Tcl ανακοινώνεται εκτός Μπέρκλεϊ (Winter USENIX). |
Ιούνιος 1990 | Ανακοινώνεται το εργαλείο Expect (Summer USENIX). |
Ιανουάριος 1991 | Πρώτη ανακοίνωση του Tk (Winter USENIX). |
Ιούνιος 1993 | Πρώτο συνέδριο 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 γίνονται και στις Ηνωμένες Πολιτείες και στην Ευρώπη.
Τα χαρακτηριστικά της Tcl περιλαμβάνουν τα εξής:
Αρχικά η 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 το τυπώνει μαζί με ένα επεξηγηματικό κείμενο:
set sum [expr 1+2+3+4+5]
puts "The sum of the numbers 1..5 is $sum."
Οι λέξεις γράφονται είτε όπως είναι, είτε σε διπλά εισαγωγικά (ώστε να μπορούν να περιέχουν κενούς χαρακτήρες), είτε μέσα σε αγκύλες, οι οποίες απαγορεύουν τις αντικαταστάσεις. Σε απλές λέξεις και σε λέξεις σε διπλά εισαγωγικά, μπορούν να συμβούν τρεις τύποι αντικατάστασης (που γίνονται από τα αριστερά προς τα δεξιά):
expr
.Από την 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++).
Η Tcllib είναι ένα σύνολο από πακέτα σεναρίων για την Tcl που μπορούν να χρησιμοποιηθούν χωρίς μεταγλώττιση.
Η επέκταση Tcl UDP παρέχει μια απλή βιβλιοθήκη που υποστηρίζει User Datagram Protocol (UDP) sockets στην Tcl.
Το Tcl Database Connectivity (TDBC), που αποτελεί μέρος της Tcl 8.6, είναι μια κοινή διεπαφή πρόσβασης σε βάσεις δεδομένων που μπορεί να χρησιμοποιηθεί από σενάρια σε Tcl. Υποστηρίζει οδηγούς για πρόσβαση σε βάσεις δεδομένων MySQL, ODBC, PostgreSQL και SQLite, ενώ περισσότερες αναμένονται στο μέλλον.
Η πρόσβαση σε βάσεις δεδομένων υποστηρίζεται επίσης μέσα από εξειδικευμένες επεκτάσεις για κάθε βάση δεδομένων.
|
|
|