Tcl/Tk, un langage de script multi

Transcription

Tcl/Tk, un langage de script multi
Tcl/Tk, un langage de script multi-plateforme
Olivier LENORMAND
C.N.R.S. Toulouse - Labège
1998
1. Tcl/Tk, qu’est-ce que c’est ? _________________________________________________3
2. Tcl/Tk par rapport à la concurrence __________________________________________3
3. Le package Tcl/Tk de base __________________________________________________5
4. Contraintes ______________________________________________________________5
4.1. Dimensionnement des machines hôtes___________________________________________ 5
4.2. Windows95 et MacOS ________________________________________________________ 5
4.3. Déploiement ________________________________________________________________ 5
4.4. Contraintes liées à l’hétérogénéité des plates-formes ______________________________ 5
5. Quelques extensions incontournables _________________________________________6
5.1. Extensions “Sun” ____________________________________________________________ 6
5.2. Autres extensions ____________________________________________________________ 6
6. Quelques applications dignes d’intérêt ________________________________________8
6.1. Tcl/Tk dans quelques grandes entreprises _______________________________________ 8
6.2. Et ailleurs ... ________________________________________________________________ 8
7. Plus modestement, quelques réalisations à la DSI ______________________________11
7.1. Intégration NT/Unix ________________________________________________________ 11
7.2. Accès ODBC à une base de données ___________________________________________ 11
7.3. En projet ...________________________________________________________________ 12
8. Quand ne pas utiliser Tcl/Tk _______________________________________________13
9. Références ______________________________________________________________14
9.1. Littérature ________________________________________________________________ 14
9.2. Sur internet ... _____________________________________________________________ 14
10. Conclusion_____________________________________________________________14
1.
Tcl/Tk, qu’est-ce que c’est ?
Votre programme a besoin d’une IHM, et doit pouvoir s’exécuter indifféremment sur toutes les plates-formes ?
Vous êtes pressé et n’êtes pas expert des environnements graphiques X11, Windows et Macintosh ?
Tout cela semble impossible ...
Sauf avec Tcl/Tk !
Tcl/Tk (Tool Command Language / Tool Kit) est un environnement de développement de type shell (langage de
commande) dont la puissance vous permet d’accéder aux IHM standards.
Avec deux lignes de code, vous concevez un bouton.
Avec deux cent lignes de code, une calculatrice scientifique.
Et avec quelques milliers de lignes de code, une application industrielle qui fait de la 3D ou de la gestion de base
de données ...
Vos applications tournent sur toutes les plates-formes majeures : UNIX, Windows 95/NT et Macintosh.
Vous pouvez même encapsuler vos programmes de manière à les rendre accessibles en ligne, via un navigateur
Web.
Voilà ce que Tcl/Tk vous apporte concrètement !
Tout cela a commencé il y a dix ans (1988) lorsque John OUSTEROUT, professeur à l’université de Berkeley
(Californie), commença à imaginer ce qui aujourd’hui a dépassé toutes ses prévisions les plus optimistes, un
langage de script universel pouvant gérer le standard des interfaces graphiques de l’époque : X10 (père du X11
bien connu).
Depuis 1994, c’est sous la houlette de Sun que Tcl/Tk continue d’évoluer, pour le plus grand bonheur de la très
nombreuse communauté qui l’a adopté et qui contribue très largement à son extension.
Tcl/Tk se compose donc principalement d’un interpréteur de commande chargé d’exécuter les scripts Tcl, et
d’une bibliothèque graphique (Tk) permettant l’accès aux environnements de type “fenêtré”.
La version actuelle de Tcl/Tk est la 8.0 (février 98), une alpha version 8.1 est aussi disponible.
2.
Tcl/Tk par rapport à la concurrence
Les langages de type “script” existaient bien avant Tcl/Tk.
En grande majorité issus du monde Unix, on trouvait et on trouve toujours aujourd’hui les “shells” sh, csh, ksh,
Perl et Python.
Et ce qu’on peut faire aujourd’hui en Tcl/Tk, on peut non seulement le faire avec ces shells, mais aussi avec des
langages de type Visual Basic ou Javascript.
Alors, qu’est-ce qui fait la différence de Tcl/Tk par rapport à ses concurrents amicaux ?
Î Tcl/Tk est multi-plateforme : Sun distribue les sources “C” de Tcl/Tk, ce qui permet de le compiler pour
l’utiliser sur l’ensemble {plate-forme, OS} voulu.
Tcl/Tk est aujourd’hui disponible en “prêt à l’emploi” (package déjà compilé) pour les environnements
Windows (Windows 3.1 avec w32s, Windows95 et Windows NT 3.51/4.0), OS/2 et Macintosh (68K et
PowerPC).
Une fois compilé, il tourne sur toutes les plates-formes Unix.
Î Le code Tcl/Tk est quasi indépendant du système hôte, c’est à dire qu’à la nature des commandes systèmes
prêt (“ls” sous Unix et “dir” sous Windows par exemple), le même code Tcl/Tk tourne indifféremment sous
Unix, Windows ou Macintosh.
La plate-forme de développement peut par exemple être différente de la plate-forme d’exploitation finale ; on
peut de même déployer une seule version de produit sur un parc hétérogène.
Ceci est aussi valable pour le code réalisant l’accès aux ressources graphiques du système hôte.
Î Tcl/Tk permet via sa librairie graphique Tk d’un code générique l’accès natif aux interfaces graphiques
des systèmes hôtes (X11, Mac ou Windows).
Cet accès est banalisé : le même code permet la gestion de l’IHM, indépendamment du système sur lequel elle
repose.
Il est néanmoins capable de générer nativement une IHM répondant complètement aux normes du système
hôte (c’est ce qu’on dénomme le “look and feel” d’une IHM).
“Hello World” sur un Macinstosh
“Hello World” sur un PC
Î Tcl/Tk est modulaire et très ouvert sur les autres environnements.
Sun développe et distribue le noyau de base Tcl/Tk, lequel accepte d’être enrichi pas des modules externes.
Sun écrit et donc fournit des modules pour cet environnement.
Mais toute la communauté Tcl/Tk produit aussi de nombreux modules qui sont très souvent spontanément mis
à disposition de ceux qui en aurait éventuellement besoin (cf. §4).
Tcl/Tk s’interface très facilement avec d’autre langages (C, C++, Java, ...), l’interpréteur Tcl est implémenté
en tant que librairie “C”, facilement intégrable dans des applications existantes.
Î Les portions de code Tcl/Tk réalisant la gestion de l’IHM sont tout à fait distinctes de celles réalisant
l’implémentation des fonctionnalités du programme, il en résulte donc une grande lisibilité des programmes
et une maintenabilité du produit final très bonne.
Î Pour finir, il n’est pas inutile de préciser que l’utilisation de tout cet environnement est totalement gratuit.
Î Gratuit, certes, mais sous la houlette de Sun, donc la pérennité de ce produit est largement supérieure aux
produits non commercialisés classiques.
Î La qualité technique globale du produit résulte d’un cadre de développement industriel : cycles comprenant
versions et états techniques, utilisateurs associés aux évolutions futures via les “wish lists”, les versions
stables cohabitent avec la version alpha, puis beta de la version suivante.
3.
Le package Tcl/Tk de base
Ce package, tel qu’on peut se le procurer chez Sun, comprend l’interpréteur Tcl, ainsi que l’extension graphique
Tk.
Les points notables de la dernière version stable disponible sont :
le fait que la 8.0 intègre un pseudo-compilateur qui fait que le code n’est réellement interprété que la
première fois qu’il est exécuté,
un package HTTP,
un package permettant la gestion des registres NT.
La future version (8.1, pour l’instant disponible en alpha) intégrera entre autre la gestion du DDE sous Windows,
l’internationalisation des caractères (Unicode), moteur d’évaluation des expressions régulières plus complet.
Î
Î
Î
Toutes les informations relatives au téléchargement de cette version, ainsi qu’au contenu des versions actuelles et
futures sont accessibles à l’adresse suivante : http://sunscript.sun.com/TclTkCore/index.html
4.
Contraintes
4.1.
Dimensionnement des machines hôtes
• Sur UNIX, Tcl, en tant que shell, a les mêmes exigences vis à vis de sa machine hôte que ses collègues csh et
ksh par exemple, c’est à dire bien peu.
Le shell intégrant l’interpréteur Tk nécessite lui “à vide” environ 800 Ko de RAM, l’occupation finale étant
bien entendue fonction de l’application exécutée.
• Sur NT, l’interpréteur Tk occupe quand à lui 3,6 Mo de RAM... L’environnement graphique Windows
semble bien plus lourd à supporter que X11 !
Conclusion : n’importe quel serveur Unix de moyenne gamme est capable d’accueillir Tcl/Tk de manière
+confortable, et n’importe quelle machine NT en est aussi capable puisque rares sont la machines NT sous
dimensionnées en RAM ...
4.2.
Windows95 et MacOS
Un petit mot sur ces deux systèmes.
Bien qu’aptes à accueillir Tcl/Tk, il faut noter que ces systèmes n’offrent pas la puissance des deux précédents.
Certaines fonctionnalités n’y sont pas disponibles (par exemple la communication inter process Tcl), et leur
usage ne doit être envisagé que dans le cas d’une application légère, ou bien complexe mais répartie (la grosse
charge étant alors assurée par des machines de type Unix ou NT).
4.3.
Déploiement
Pour ce qui est du déploiement de l’environnement complet :
Avant toute installation d’une application, l’environnement complet Tcl/Tk doit être installé.
Ce qui sur Unix implique, outre la compilation, l’installation des binaires et des librairies dans les
répertoire ad hoc. Sur NT, cette installation passe par la mise en place d’un répertoire propre, de dll et
par la mise à jour de la base de registres.
Dans le cas du déploiement d’une application dans un environnement existant,
Il suffit juste de déposer les sources la composant dans le répertoire choisi, répertoire duquel sera lancé
cette application.
Donc, dans le cas d’un environnement classique, il y a forcément installation sur le poste client.
Dans le cas d’une application Tcl/Tk tournant dans un navigateur, c’est un plug-in qui sera automatiquement
installé sur le poste client lors du premier chargement de cette application.
4.4.
Contraintes liées à l’hétérogénéité des plates-formes
Un des points forts de Tcl/Tk, c’est bien évidemment son indépendance vis à vis de son système hôte.
Cette indépendance n’étant bien sûr réelle qu’à 99%, il faut penser à encapsuler les traitements dépendant du
système afin de garantir la portabilité du produit final.
A cet effet, le langage fournit deux choses :
• des primitives permettant de savoir le type de machine hôte, son système d’exploitation, etc...
• mais surtout des fonctions d’entrée-sortie de base qui permettent par exemple de travailler sur des
fichiers avec des ordres génériques d’ouverture, de copie, de création..., génériques donc non
dépendants du système.
5.
Quelques extensions incontournables
Tcl/Tk prend toute sa valeur lorsqu’on regarde l’étendue et la qualité des extensions disponibles.
5.1.
Extensions “Sun”
5.2.
Autres extensions
Î Le “WEB-Browser Plug-in” : Il permet d’exécuter des programmes Tcl/Tk dans un navigateur
(Netscape ou IE).
Î “Tcl-Blend” permet de charger la machine virtuelle Java au sein de l’interpréteur Tcl, donc d’y
exécuter du code JAVA.
Î “JACL” est un interpréteur Tcl écrit en JAVA.
Î “TclHttpd” est un serveur Web complet écrit en Tcl.
Î “SpecTcl” est un générateur d’IHM TK écrit en Tcl/Tk.
On trouve une très grande variété d’extensions pour Tcl/Tk.
Certaines sont aujourd’hui obsolètes, puisque depuis leur sortie, les fonctionnalités apportées par ces extensions
se sont trouvées intégrées au noyau de base.
Mais la plupart d’entre elles perdureront, du fait que Tcl/Tk n’a pas pour vocation à devenir un environnement
pouvant nativement tout faire, mais simplement d’être structuré pour accepter très facilement les extensions, de
manière à pouvoir couvrir le champ d’application le plus vaste possible.
Un rapide tour d’horizon (sur internet forcément) nous permet de nous assurer de la disponibilité des extensions
suivantes :
• Générateurs d’IHM
XF [http://home.att.net/~svendelmas/xf.html]
Visiblement abandonné depuis 1996.
Free Visual TCL [http://www.virtualbase.com/vtcl.html]
Visual TCL [http://www.neuron.com/stewart/vtcl]
Î
Î
Î
• Widgets, graphisme
Tix [http://www.xpi.com/tix]
BLT [http://www.tcltk.com/blt]
Enrichissentt par de nouveaux widgets la panoplie standard de Tk.
ToGL [http://www.cs.umd.edu/~bederson/Togl.html]
Interface OpenGL pour Tcl/Tk.
Img [http://www.worldaccess.nl/%7Enijtmans/img.html]
Support d’un grand nombre de format de fichiers graphiques.
Î
Î
Î
• Programmation Objet
[incr Tcl] [http://www.tcltk.com/itcl]
Î
• Débuggers
Juice [http://www.xpi.com/juice]
Tuba [http://www.doitnow.com/~iliad/Tcl/tuba]
Î
Î
• Réseaux
TCL-DP [http://simon.cs.cornell.edu/Info/Projects/zeno/Projects/Tcl-DP.html]
Implémentation des interfaces TCP, UDP et RPC.
Scotty [http://wwwsnmp.cs.utwente.nl/~schoenw/scotty]
Gestion de réseau (SNMP, ...)
Forecast [http://www.casabyte.com/Forecast/Forecast.html]
Générateur de gestionnaire de réseau et de systèmes
Î
Î
Î
• Bases de données
ODBC [http://www.hut.fi/~rnurmi/tclodbc.html]
Î
Î ODBC [ftp://ftp.neosoft.com//pub/tcl/sorted/databases/odbctcl-0.2]
• Administration NT
NT Extensions to TCL[http://zazu.maxwell.syr.edu/nt-tcl/]
Î
• les “inclassables”
Forecast [http://www.casabyte.com/Forecast/Forecast.html] et
Expect [http://expect.nist.gov/]
Permettent d’automatiser les tâches s’appuyant sur des programmes interactifs (telnet, ftp,
...).
ICE Tcl/Tk [http://icemcfd.com/tcl/ice.html]
Compilateur Tcl/Tk C.
SWIG [http://www.cs.utah.edu/~beazley/SWIG]
Convertit du C/C++ en une extension de Tcl.
TOX [http://simon.cs.cornell.edu/Info/Projects/zeno/tocx/index.html]
Permet au Tcl/Tk sur plate-forme Windows d’accéder aux contrôles ActiveX.
TCLX [http://www.neosoft.com/tclx]
Extensions au Tcl de base (orienté développement de grosses applications)
Î
Î
Î
Î
Î
Æ
6.
Quelques applications dignes d’intérêt
Tcl/Tk non seulement très utilisé pour le développement de petites applications d’administration de système
(champ d’action des shells classiques), mais aussi pour celui de grosses applications stratégique pour l’organisme
qui les utilisent.
Voici de manière non exhaustive une sélection d’applications qui reposent tout ou en partie sur Tcl/Tk :
6.1.
Tcl/Tk dans quelques grandes entreprises
6.2.
Et ailleurs ...
Î MOTOROLA :Avec SMART (Semiconductor Manufacturing Automation Real-time Toolkit), Motorola
réalise le contrôle de la chaîne de production de ses semi-conducteurs.
Î SYBASE :Une application d’un million de lignes de code TCL permet à SYBASE de valider l’ensemble de
sa suite logicielle avant de la distribuer.
Î ORACLE : Enterprise Manager, le module d’administration d’ORACLE écrit en Tcl permet à l’utilisateur
d’ajouter ses propres procédures d’administration.
Î HEWLETT PACKARD : Tcl/Tk est utilisé pour réaliser l’interface graphique de leur analyseur ATM.
Î DIGITAL : Leur Forum Altavista repose sur Tcl pour toutes leurs applications coopératives.
Î SCOTTY, déjà cité en 4.2, est bien plus qu’une extension de Tcl/Tk.
Ce gestionnaire de réseau forme une application autonome, dans la lignée de HP-OpenView :
Î Visu3D, logiciel expérimental de conception automatique de mécanismes à engrenages, développé
dans le cadre d'une thèse de doctorat a l'INSA de Toulouse.
Tcl/Tk 8.0 sert de liaison entre les divers modules de calcul en C et a permis le développement
d'une interface graphique conviviale en un temps record
Î BATES, gestionnaire de réseau ATM [http://www.fokus.gmd.de/nthp/bates]
7.
Plus modestement, quelques réalisations à la DSI
Depuis bientôt trois ans, la DSI met en œuvre Tcl/Tk, en particulier en réponse aux problématiques suivantes :
7.1.
Intégration NT/Unix
Problématique :
Une grosse application de gestion est développée sur un serveur Unix.
Développer cette application efficacement implique la possibilité de pouvoir développer , et donc de pouvoir
tester, plusieurs versions en parallèle.
Cette abondance d’environnements entraîne une gestion assez lourde de ces derniers.
Comment envisager la réalisation de cette application de gestion des environnements ?
La première solution consiste à développer la gestion de ces environnements de manière à l’utiliser en mode
texte, donc directement via telnet : solution limitée très peu ergonomique !
Pour aller un peu plus loin, un environnement fenêtré peut être envisagé, avec un affichage X11 déporté sur le PC
grâce à un émulateur de terminal X : solution imposant l’installation d’un émulateur sur chacun des postes.
La solution choisie a donc permis de faire communiquer le serveur Unix et les PC, grâce à l’installation de
Tcl/Tk sur ces deux types de plate-forme.
IHM client Tk
Process client Tcl
R equêtes via R P C
Tcl-DP
Tcl-DP
Process serveur Tcl
Structure choisie :
Sur le serveur ont donc été développées en Tcl l’ensemble des primitives de gestion et d’accès aux différents
environnements.
Sur les clients est installé le code Tcl/Tk implémentant l’IHM.
Lors du lancement de l’application cliente, celle-ci se connecte à la partie serveur grâce à l’extension TCL-DP (cf
§).
Dès lors, tous les ordres donnés par le client sont envoyés au serveurs, exécutés par ce dernier, puis leur compterendu est retourné au client, voire à l’ensemble des clients connectés.
Conclusion : Tcl/Tk a rendu possible la réalisation d’un produit de gestion des environnements possédant les
caractéristiques suivantes :
• le client a une vue graphique de ses environnements (ceux qui sont libres ou non accessibles, ceux
qui sont occupés et par qui, quelle version y tourne sur quelle données, etc...).
• le client n’a plus à connaître Unix pour choisir et tester dans un environnement, un simple click sur
le bouton représentant cet environnement ouvre un telnet sur son poste vers le serveur, et lui permet
d’être directement connecté dans les conditions voulues.
• l’application de gestion des environnements tournant en partie en local sur le poste de travail, les
transferts de données affichées par cette application vers l’environnement bureautique du poste sont
beaucoup plus immédiats que dans le cas où, générés sous Unix, ils devaient être transférés sur le
poste via ftp.
• et cette application est indépendante du client (MAC ou PC).
7.2.
Accès ODBC à une base de données
Problématique :
Doter une application de gestion en mode texte d’une capacité à visualiser graphiquement un sous-ensemble de
ses données en temps réel.
Dans le cas présent, la structure graphique à afficher et à manipuler est de type arborescente.
Gérer simplement uns structure de ce type est loin d’être trivial ... sauf en Tcl/Tk !
Client Tcl/Tk/Tix
R e q u ê te s O D B C
Tcl-ODBC
ODBC propriétaire
Base de données
Structure choisie :
C’est l’extension Tix (cf §) qui nous permet cette fois ci de disposer des primitives de gestion d’arbres.
L’extension ODBC (cd §) permet quand à elle à l’application cliente de récupérer le résultat des requêtes SQL
qu’elle adresse au moteur de base de données.
Conclusion :
En quelques dizaines de jours de développement, on obtient une application cliente ODBC, qui gère des élément
graphiques complexes de type arbre.
Il est clair que pour un même résultat, une application équivalente en C++ ou en JAVA aurait nécessité un
investissement bien plus important.
Cette approche à d’ores et déjà prouvé sa grande capacité à produire un code très tolérant aux évolutions, encore
une fois portable t performant.
7.3.
En projet ...
La DSI envisage à court terme d’utiliser EXPECT (cf §) pour automatiser :
• la mise à jour des mots de passe des serveurs Unix (passwd est très peu enclin à être non-interactif),
• la récupération de fichiers sur des machines dont l’accès nécessite des rebonds sur des machines
intermédiaires (telnet n’ayant rien à envier à passwd dans ce domaine...).
8.
Quand ne pas utiliser Tcl/Tk
Tcl est né du besoin de disposer d’un environnement permettant d’assembler facilement des librairies existantes,
afin de les solidariser en une application unique, disposant un langage de commande interprété universel.
Tcl a depuis prouvé son aptitude à remplir ce genre de fonctions.
Mais, on a aussi vu apparaître de plus en plus de grosses applications écrites uniquement en Tcl/Tk.
Et cet environnement s’est montré tout à fait apte à supporter ce genre de contraintes, bien qu’à l’origine il n’était
pas prévu pour ça.
Néanmoins, voici quelques situations où le choix Tcl/Tk serait un peu risqué :
• l’application est temps-réel : l’interpréteur Tcl/Tk, même dans sa version optimisée (8.0), reste un
interpréteur. Et dans ces conditions, on ne peut obtenir de performances optimales.
Néanmoins, on peut contourner ces problèmes en se servant d’un compilateur Tcl C ou en
regroupant dans des librairies le code critique.
• l’application est sensible, et le code ne doit pas être visible de l’utilisateur : le code étant interprété,
il est lisible, duplicable et ... modifiable ! Là encore, l’usage d’un compilateur permet de blinder
l’application. Une autre approche peut consister à n’offrir cette application qu’à travers un
navigateur Web, mais ceci au prix de quelques limitations ...
• l’application est complexe (Tcl/tk traite difficilement les données fortement structurées) et/ou très
volumineuse (se diriger alors vers la mise en œuvre d’une approche Objet (Incr Tcl), et/ou celle des
“namespaces” (Tcl 8.0)).
Æ
Donc, dans tous les cas, Tcl/Tk est utilisable. On veillera seulement à ne pas en faire un choix exclusif dans un
contexte qui s’éloigne trop des spécifications auxquelles cet environnement répond.
9.
Références
9.1.
Littérature
Deux ouvrages de base :
Tcl and the Tk toolkit de John Ousterhout (Addison-Wesley, ISBN 0-201-63337-X),
Practical Programming in Tcl and Tk de Brent Welch (Prentice Hall, ISBN 0-13-616830-2)
En anglais bien sûr, mais complémentaires et très bien faits (exemples en ligne, ...).
Pour un tour approfondi des principales extensions :
Tcl/Tk Tools de Mark Harrison (O’Reilly, ISBN 1-56592-218-2)
9.2.
Sur internet ...
Site officiel de Tcl/Tk : http://sunscript.sun.com
C’est là que Sun distribue Tcl/Tk.
Pour les français, le serveur ftp de jussieu est miroir (entre autre) de Tcl/tk
(ftp.jussieu.fr/pub/tcl/distrib).
Bon point de départ pour un voyage dans la communauté Tcl/Tk : http://www.tcltk.com
Et sur les news :
fr.comp.lang.tcl, suivi régulièrement par les gens de Sun, et
comp.lang.tcl, pour les français que nous sommes ...
Pour finir, la FAQ officielle :
http://www.teraform.com/~lvirden/tcl-faq/
10.
Conclusion
Tcl est :
• un langage de script de haut niveau (moins de code à écrire pour une application donnée),
• interprété (son code est directement exécutable, sans compilation ni édition de liens, bien que des
compilateurs soient disponibles),
• extensible (il est très facile d’enrichir votre environnement Tcl avec des nouvelles librairies Tcl ou C)
• intégrable à des applications existantes (l’interpréteur Tcl n’est qu’un ensemble de fonctions C que l’on peut
appeler d’une autre application),
• capable de générer une IHM qui tourne sur plusieurs plates-formes (la même version d’un script Tcl tourne
sur Unix, Windows et Macintosh),
• capable de charger automatiquement des bibliothèques dynamiques (DLL),
• capable de s’exécuter dans un navigateur Web (plugin),
• est en constante évolution (tous les jours apparaissent de nouvelles extensions),
• gratuit.
Bien plus qu’un langage de programmation parmi les autres, la modularité, la flexibilité et la puissance que
procurent Tcl/Tk en font une solution tout à fait envisageable, même industriellement, face à l’hétérogénéité
actuelle de nos environnements.

Documents pareils