Books Home

TCL / TK

APPRENTISSAGE ET RÉFÉRENCE

 

Bernard Desgraupes

464 pages - CD_ROM

ISBN 2-7117-8679-X

Editions Vuibert Informatique

 

Tcl est un des grands langages de scripts actuels au même titre que Perl ou bien Python. Son nom (prononcé tickle ['tikl] en anglais) est l'abréviation de tool command language que l'on peut traduire par langage de commandes-outils. Il a été créé par le professeur John Ousterhout de l'université de Berkeley en Californie en 1988. Tcl est accompagné d'une extension appelée Tk (abréviation de tool kit, boîte à outils) qui permet de doter les programmes écrits en Tcl d'une interface graphique. Il est bien entendu possible d'utiliser Tcl sans faire appel à Tk, autrement dit d'écrire des scripts réalisant toutes sortes de tâches sans avoir recours à une interface graphique avec des fenêtres, des dialogues, etc. En revanche, Tk ne peut être utilisé indépendamment de Tcl : toutes les actions provoquées par l'interface (clic sur un bouton, sélection d'un article dans un menu, etc.) sont programmées en Tcl.

Tcl a été conçu à l'origine comme un outil devant permettre de faire le lien entre différents programmes compilés sur les plates-formes Unix et se substituer aux shells dont les capacités de programmation sont beaucoup trop limitées : il devait servir en quelque sorte de glu pour assembler des composantes et les faire travailler ensemble, réaliser des tâches de configuration, exécuter des commandes de haut niveau, etc. Mais les capacités de Tcl se sont tellement développées et diversifiées et ont atteint un tel niveau de qualité qu'il a été très rapidement possible de concevoir des applications écrites exclusivement en Tcl : la possibilité de manipuler les systèmes de fichiers, de créer des connexions de réseau, de contrôler les flux de données, jointes à la puissante interface graphique procurée par Tk ont permis à Tcl de dépasser son objectif initial.

Tcl excelle par ailleurs dans le traitement des chaînes de caractère et donc, de manière générale, dans la manipulation de texte : il est donc devenu un outil essentiel tout autant pour les programmeurs que pour les auteurs de pages web, les administrateurs de réseaux ou les simples utilisateurs qui souhaitent automatiser des tâches répétitives ou se forger des outils personnalisés en quelques lignes de code.

 

Les langages de scripts

Comme tous les langages de scripts, Tcl consiste à la fois en une collection de mots-clés et de règles syntaxiques qui constituent le langage à proprement parler et en un interpréteur de ce langage. Les commandes que l'on écrit au moyen des mots du langage sont envoyées à l'interpréteur qui se charge de les exécuter immédiatement et qui renvoie le résultat éventuel de cette exécution. Il n'est pas nécessaire de compiler des fichiers source puis de lier des fichiers objet : les fichiers sources que l'on rédige au moyen d'un langage de scripts sont directement exécutables. C'est en cela que les langages de scripts se distinguent d'un langage compilable tel que le Pascal, le C, le C++ ou encore Java et c'est cette immédiateté qui fait tout leur intérêt. On peut immédiatement tester le code que l'on vient d'écrire afin d'en vérifier la validité.

Une autre caractéristique remarquable des scripts et programmes écrits au moyen d'un langage tel que Tcl est leur portabilité : en effet, un même script, à moins qu'il ne comporte des instructions vraiment spécifiques à un environnement particulier, fonctionnera et s'exécutera sur toute plate-forme sur laquelle existe un interpréteur Tcl : on trouve des versions de Tcl sur presque tous les Unix mais également sur Macintosh, Windows, OS/2 et WindowsNT. Cela permet de développer des applications qui pourront être installées sur des machines variées, ce qui n'est pas le cas avec les applications écrites en C ou C++ par exemple qui sont dépendantes du type de machine pour lesquelles elles ont été compilées.

En contrepartie, une application écrite en Tcl aura des performances moindres en termes de rapidité qu'un programme compilé. Cependant, sur des applications de taille petite ou moyenne la différence sera la plupart du temps imperceptible. D'autre part, les versions récentes de Tcl (à partir de la version 8.3) ont apporté un gain considérable dans la vitesse d'exécution, en particulier grâce à une réécriture de l'interpréteur et de toute la structure interne du code source du langage et au fait que Tcl est maintenant capable de générer du code compilé afin d'optimiser ses performances.

Si, pour une application de taille moyenne ou pour des tâches ponctuelles, la différence avec un programme compilé n'est pas sensible, en revanche il serait déraisonnable d'envisager de construire de grosses applications ou des programmes demandant une grande quantité de calculs avec un langage de scripts. Dans ce genre de situations, Tcl restera cependant irremplaçable pour jouer le rôle de glu entre des applications compilées et permettre à chacun de les assembler en fonction de ses besoins et de créer des outils sur mesure. De ce point de vue, on peut le comparer aux autres shells que l'on trouve sur les systèmes Unix (bash, csh, ksh et autres) ou à un langage tel que AppleScript sur Macintosh.

Enfin, les langages de scripts permettent de bâtir des applications professionnelles en des temps extrêmement courts. Cela est dû non seulement au fait que le code est directement exécutable, testable et vérifiable mais aussi au fait que les commandes de haut niveau qu'ils fournissent sont capables d'exécuter des tâches complexes en les réduisant à une unique instruction.

 

Extensibilité de Tcl

Il est un autre aspect encore qui fait de Tcl un outil unique : c'est sa double capacité d'extensibilité et d'intégration. En réalité, le langage Tcl ne fait que grouper des arguments, interpoler des variables et des expressions, substituer les résultats et invoquer les commandes, sans savoir réellement ce que ces commandes font concrètement : le travail effectif est accompli par les commandes elles-mêmes, qui sont des procédures implémentées en code C et qui se sont fait enregistrer auprès de l'interpréteur Tcl. Il est tout à fait possible, dans ces conditions, de définir et d'enregistrer de nouvelles commandes.

L'extensibilité se présente sous deux aspects différents :

Comme avec les autres langages de scripts modernes, il est bien entendu possible de construire, à partir des fonctions de base, des procédures nouvelles que l'on peut appeler dans différents scripts et que l'on peut réunir dans des fichiers afin de constituer des bibliothèques réutilisables. C'est de loin le mode d'utilisation de Tcl le plus simple et le plus répandu. Le code source de Tcl/Tk est ouvert, ce qui signifie qu'il est public et librement distribué. Il existe aussi de nombreuses extensions disponibles gratuitement sur l'Internet. L'extension TclX par exemple ajoute de nombreux outils dont certains se sont avérés tellement indispensables qu'ils ont été incorporés aux commandes de base de Tcl. L'extension [incrTcl] permet d'introduire la notion de classes dans le style de C++ et d'adopter un style de programmation orientée objet dans les scripts Tcl.

Il est également possible d'écrire des extensions pour Tcl en langage Java plutôt qu'en C ou C++. Les extensions sont des bibliothèques partagées et le langage utilisé pour les créer n'a finalement pas d'importance. Il suffit que l'API de Tcl/Tk existe pour ce langage, ce qui est le cas de Java. Grâce à TclBlend, on peut même charger une machine virtuelle Java dans une application écrite en Tcl et avoir ainsi accès aux méthodes et aux classes de Java.

Enfin, mentionnons l'existence d'un module (en anglais plug-in) destiné aux navigateurs tels que Netscape Navigator ou Internet Explorer appelé Browser Plugin. Il permet d'exécuter des scripts Tcl à l'intérieur même d'une page Web et fait donc de Tcl un concurrent direct de JavaScript. Ce module existe aussi bien pour les environnements Unix que pour Macintosh ou Windows.

 

Apprentissage de Tcl

L'apprentissage de Tcl ne présente aucune difficulté : sa syntaxe consiste en un nombre limité de commandes très facilement compréhensibles et il ne comporte aucune des notions qui font la difficulté de langages tels que le C ou le C++. C'est une autre caractéristique des langages de scripts d'offrir des commandes dites de haut niveau qui se chargent de masquer à l'utilisateur toute la complexité sous-jacente des tâches qu'elles exécutent : l'utilisateur de Tcl n'aura jamais à se préoccuper des problèmes de déclaration de types, de gestion de pointeurs, d'allocation de mémoire, de manipulation d'adresses, etc. Il dispose de commandes qui lui permettent de programmer en quelques lignes des tâches dont la programmation en C, par exemple, requerrait des dizaines, voire des centaines de lignes de code.

Suivant le type d'applications que l'on envisage de développer, on pourra décider d'avoir recours à Tk ou pas : de très nombreuses tâches de maintenance, de gestion de sites web, de manipulation de fichiers sur des systèmes, que ce soit en réseau local ou en liaison avec des serveurs distants, ou encore de communication interactive avec des utilisateurs, peuvent être contrôlées au moyen de scripts écrits exclusivement avec les commandes de base de Tcl et ne nécessitant aucune interface graphique. On pourra dans ce cas faire l'économie de l'apprentissage de Tk. Il est vrai qu'une fois que l'on a goûté à la puissance et à la simplicité d'utilisation de Tk, on peut ensuite difficilement s'en passer.

 

Comment lire cet ouvrage

Le chapitre 1 décrit le fonctionnement des applications tclsh et wish qui font partie de toutes les distributions Tcl. L'étude de la syntaxe de Tcl commence au chapitre 2 où sont introduites les notions de base et se poursuit aux chapitres 3 et 4 avec les structures de contrôle et les procédures qui sont les briques élémentaires permettant de construire des scripts et des applications. À partir de là on pourra, selon les besoins, lire les chapitres consacrés à des aspects plus spécifiques du langage : les accès aux fichiers au chapitre 5, les questions de formatage et d'encodage des données au chapitre 6, les expressions régulières au chapitre 7. Le chapitre 11 est consacré aux interpréteurs et à l'organisation des bibliothèques de procédures. Le chapitre 12 est consacré tout particulièrement aux capacités de communication de Tcl : échange avec d'autres processus et fonctionnement en réseau. Les principes généraux de l'interface graphique Tk sont exposés au chapitre 8 tandis que l'on trouvera réunis au chapitre 9 tous les widgets (éléments graphiques de base) disponibles avec de multiples exemples de syntaxe et illustrations. Le chapitre 10 aborde des aspects plus avancés de la programmation avec Tk avec les notions fondamentales de liaison de scripts et d'événements, de paramétrisation des différents widgets, de construction de mégawidgets.

On trouvera à la fin de l'ouvrage quelques annexes. L'annexe A introduit, au moyen de plusieurs exemples, les rudiments permettant de construire en langage C des extensions au langage Tcl et d'incorporer Tcl lui-même à d'autres applications. L'étude approfondie de l'API de programmation de Tcl et de Tk dépasse largement le cadre de cet ouvrage. L'annexe B résume les particularités rencontrées sur des plates-formes particulières (Unix, Macintosh et WindowsNT) et expose quelques principes généraux pour obtenir des applications qui soient réellement multi plates-formes. Les annexes qui suivent comportent des informations pratiques : bibliographie (annexe E), adresses sur l'Internet où l'on pourra trouver des ressources de toutes sortes concernant Tcl/Tk (annexe F) et lexique anglais-français (annexe G).

La seconde partie de cet ouvrage se trouve sur le CD-ROM qui l'accompagne. Il s'agit de la référence complète du langage : chaque commande de Tcl et de Tk est récapitulée et présentée systématiquement de la façon la plus exhaustive possible, avec toutes ses sous-commandes, toutes les options disponibles, les arguments requis, les arguments optionnels, etc. Cette référence se présente sous la forme de deux fichiers au format pdf appelés ReferenceTcl.pdf et ReferenceTk.pdf. La consultation de ces deux documents de Référence est indispensable pour compléter l'information présentée tout au long des chapitres consacrés à l'apprentissage de Tcl/Tk. C'est en la parcourant et à force de pratique que l'on parviendra à maîtriser le langage dans toute sa richesse.

Le CD-ROM comporte d'autre part quantité de ressources liées à Tcl/Tk: des versions du langage compilées pour diverses plates-formes (Linux, AIX, HP-UX, IRIX, Solaris, VMS, Palm, Macintosh, Windows), le code source de Tcl/Tk, de très nombreuses extensions sous forme de bibliothèques de code Tcl ou de bibliothèques partagées, etc. Le contenu du CD-ROM est détaillé dans l'annexe H.

 

Bernard Desgraupes

Paris, sept 2001-mars 2002