Tcl est l'abréviation de Tool Command Language. C'est un langage de script initialement conçu en 1988 par John Ousterhout et son équipe à l'université de Berkeley. Il s'inspire principalement des langages C, Lisp, Shell et Awk. Ce langage à typage dynamique est multiplate-forme, extensible, facile à apprendre et repose sur onze règles syntaxiques. Tcl s'interface très aisément avec le langage C, ce qui lui permet de servir par exemple d'interprète embarqué dans des applications.
Caractéristiques :
- Tcl est un langage de script comme Python, Perl, Lua et d'autres
- Tk est une interface graphique qui a été aussi liée à Python, Perl, Scheme...
- Depuis la version 8.0 Tcl est compilé à la volée
- A la différence de Perl, cette compilation peu aussi intervenir suivant le besoin après le démarrage
- A la différence de Python, le résultat de la compilation n'est pas sauvé dans un fichier
- Les versions 8.x de Tcl s'exécutent sur beaucoup de systèmes UNIX, sous Windows 9X/NT, sous Mac (NDT : sous Linux)
- Depuis la version 8.1 Tcl utilise le codage Unicode
- Tcl/Tk est disponible librement, y compris son source, sous une licence de type BSD
- Tcl est économe en mémoire vive.
- Tout est une chaîne de caractères (traduction littérale de everything is a string) : même le code définissant une procédure peut être manipulé comme une chaîne.
- Tout est une commande : même les instructions comme if ou while sont des commandes, et ne relèvent aucunement de la syntaxe du langage.
- Toutes les commandes, (y compris l'affectation de variables) peuvent être surchargées.
- Les expressions mathématiques sont évaluées par une commande spéciale, avec une syntaxe inspirée du C.
- Les listes imbriquées sont l'un des types de base du langage, et permettent une programmation fonctionnelle très concise. La syntaxe devient alors proche de la notation préfixée.
- L'introspection de l'interprète permet d'accéder à toute la pile d'exécution, et d'exécuter des commandes à un niveau supérieur (dans la pile).
- Il est possible de définir des actions à déclencher sur la lecture ou écriture d'une variable, ainsi que sur l'appel d'une procédure.
- Il est possible de définir de nouvelles structures de contrôle (do .. until par exemple) en quelques lignes.
- Les chaînes de caractères respectent la norme Unicode, et des commandes permettent de convertir des chaînes entre différents codages.
- Gestion des sockets multiplate-forme, aussi bien côté client que côté serveur.
- Recherche et substitution d'expressions régulières.
- Intégration aisée de code natif C, C++ et Java.
- Aucune programmation orientée-objet dans le cœur du langage, mais de nombreuses extensions permettent cette approche, même sans ajouter de code natif.