- Tcl/Tk est un ensemble d’outils sous licence BSD permettant de créer à la fois des CLI et des GUI de type natif sur Windows, Linux et macOS, avec prise en charge des événements et des E/S non bloquants ainsi que d’un threading isolé
- Tcl est un langage centré sur les commandes qui interprète le premier mot comme une commande et traite le code comme les données sous forme de chaînes ; Tk abstrait l’interface propre à chaque système d’exploitation sous forme de widgets et d’événements
- Tcl/Tk 9.0, publié le 13 novembre 2025, ajoute le 64 bits, Unicode complet, un encodage strict, le packaging en fichier unique via ZipFS, SVG, le DPI haute résolution et le Dark Mode, mais introduit des changements de compatibilité pour une partie du code existant
- Il est utilisé depuis longtemps dans
git gui, des outils FPGA/EDA, Cisco IOS, des environnements d’exploitation de l’ESA, la compilation et les tests de SQLite, l’application Decent Espresso, etc., et certains scripts des années 1990 s’exécutent encore avec les versions récentes - Plutôt qu’aux calculs numériques massifs, il se prête comme langage de liaison aux interfaces événementielles, à l’automatisation, aux E/S, aux DSL et à l’orchestration de processus natifs, tandis que le calcul peut être délégué à des composants externes en C, C# ou Python
Pourquoi choisir Tcl/Tk
- Tcl/Tk permet de composer un environnement d’environ 100 Mo ou moins, même avec des packages courants, et de créer de petites applications en fichier unique selon les plateformes prises en charge, ainsi que des applications web
- La licence BSD autorise la modification, la redistribution et la vente totale ou partielle, tandis que la communauté Tcl maintient le cœur et les versions
- Les autres options GUI étudiées présentaient les contraintes suivantes
- AutoHotkey v2 convient aux petits outils Windows, mais il est réservé à Windows et ne garantit pas les appels natifs sous Wine
- C# WinForms dépend des API Windows, tandis que MAUI et Avalonia ont de lourdes dépendances et rendent le développement de petites applications non enterprise fastidieux
- Les applications web locales de type Electron obligent à gérer la communication frontend-backend, les conflits de ports et la sécurité, et un navigateur vide peut déjà consommer plus de 100 Mo
- Une fenêtre simple créée avec Fyne ou Gio en Go comportait environ 40 000 dépendances indirectes et un binaire statique de plus de 30 Mo, sans ressembler à une application native
- Qt implique une configuration complexe autour de MOC, des signal/slot à la frontière native, et des licences GPL/LGPL ou commerciales
- De nombreux frameworks GUI modernes dessinent directement sur un canvas plutôt que d’utiliser les API d’interface du système d’exploitation, et embarquent tout l’environnement d’exécution par OS et CPU, ce qui rend difficile l’obtention d’une apparence native
Tcl, conçu comme langage de liaison
- Tcl, présenté par John Ousterhout en 1990, a été conçu comme une colle architecturale reliant du code bas niveau performant à une couche logique lisible par l’humain
- Bridge : relie du code comme C++ ou Rust à une interface de haut niveau
- Orchestrate : contrôle les flux de données entre programmes et modules
- Wrap : expose des traitements internes complexes sous forme de commandes de script simples
- Tk est une boîte à outils GUI multiplateforme qui complète les interactions en ligne de commande de Tcl, et peut être chargé avec
package require Tk - Le petit cœur en C de Tcl prend en charge Windows, Linux, macOS ainsi que ARM, x86 et RISC-V
- Pour Android, il est possible d’utiliser Termux pour la CLI et AndroWish pour la GUI
- Ousterhout a reçu en 1997 l’ACM Software System Award pour le développement de systèmes logiciels ayant exercé une influence durable
Exemples industriels d’usage au long cours
- Tcl est utilisé depuis environ 40 ans dans des environnements où la fiabilité, la rétrocompatibilité et la portabilité sont essentielles
git guietgitk, inclus dans Git- Langage d’automatisation pour les outils de conception FPGA et de puces de Xilinx, Altera, Cadence, etc.
- Cisco IOS Embedded Event Manager
- GUI internes pour les fermes de simulation et testeurs matériels d’Intel, NVIDIA et AMD
- Calibre et Virtuoso de Siemens EDA
- Environnements opérationnels ESTEC et ESOC de l’ESA
- Un même outil Tcl/Tk peut s’exécuter sans recompilation depuis un terminal de centrale nucléaire jusqu’à un Raspberry Pi
- SQLite a d’abord été créé comme extension Tcl, et la moitié de ses tests sont écrits en Tcl
- Tcl joue aussi le rôle d’« assembleur » en post-traitant plus de 125 fichiers d’entrée C afin de produire plus de 200 000 lignes de source final SQLite
Composition de l’installation et modes d’exécution
- Une installation classique inclut les composants suivants
tclsh: interpréteur CLIwish: shell GUI incluant Tk et la boucle d’événementsTcllib·Tklib: bibliothèques commehttp,csv,json,aes,tooltip,dateentry- Packages d’extension comme Thread, TLS ou le glisser-déposer
- Lancé sans argument, il ouvre un REPL permettant de saisir des commandes, de coller des scripts et d’exécuter des fichiers via
source - En passant un fichier, par exemple
tclsh myscript.tclouwish app.tkapp, il s’exécute en mode batch non interactif - Sous Windows,
wishest une application GUI : il utilise donc la Tk Console au lieu d’une vraie console, et si le thread UI est bloqué, la sortie peut sembler interrompue elle aussi - Pour l’apprentissage,
tclshest recommandé, car il fournit les entrées/sorties standard sur toutes les plateformes et peut aussi charger Tk
La syntaxe de Tcl centrée sur les commandes
- Le code source Tcl est composé de mots séparés par des espaces : le premier mot est toujours la commande, les autres sont ses arguments
- Les principaux éléments syntaxiques sont les suivants
set: définit ou consulte une variable$name: substitue la valeur d’une variableproc: définit une procédure qui se comporte comme une nouvelle commande[...]: exécute le script interne et substitue son résultat{...}: regroupe en un seul argument sans substitution"...": regroupe en un seul argument tout en effectuant les substitutions$,[]et\{*}: développe une liste en plusieurs arguments::: désigne un chemin global ou d’espace de noms- Les retours à la ligne et
;: séparent les commandes
- Dans
string range "Tcl Programming" 0 2,stringest un ensemble qui répartit vers la sous-commanderangeet renvoieTcl if,whileetreturnsont eux aussi des commandes ordinaires, pas des mots-clés réservéswhileréévalue de façon répétée les chaînes de condition et de corps- Avec
uplevel, on peut créer des structures de contrôle personnalisées commerepeat ... until|while ... returntransmet les codes de complétionTCL_OK,TCL_ERROR,TCL_RETURN,TCL_BREAK,TCL_CONTINUE
Homoiconicité et substitutions sûres
- En Tcl, code et données sont tous deux des chaînes composées de mots, si bien qu’une même valeur peut être interprétée comme une liste, des données ou une commande à exécuter
- Lorsqu’on développe une liste avec
{*}$userinput, le premier élément devient la commande et les suivants les arguments ; si les arguments contenant des espaces ne sont pas correctement regroupés, cela peut provoquer des problèmes comme des erreurs de nom de canal - Cette homoiconicité facilite les DSL et l’extension des structures de contrôle, mais crée aussi une charge en matière d’intégrité et de sécurité, car les données peuvent devenir du code exécutable
- Les callbacks doivent être construits avec
[list command $arg]afin de préserver les frontières des arguments contenant des espaces et des caractères spéciaux - Les expressions de
expretifdoivent toujours être entourées de{...}afin d’éviter les doubles substitutions et l’injection de commandes, tout en bénéficiant de l’optimisation en bytecode - Le Safe Interpreter bloque par défaut l’accès au système de fichiers, aux sockets et aux bibliothèques externes, et n’expose que les fonctionnalités autorisées via
interp alias
Les nouveautés de Tcl/Tk 9.0
- La Tcl/Tk Core Development Team a publié la version 9.0 le 13 novembre 2025, 12 ans après Tcl 8.6
- Les principaux changements sont les suivants
- Passage complet au 64 bits et prise en charge de l’ensemble des points de code Unicode
- ZipFS, qui monte les fichiers ZIP comme systèmes de fichiers virtuels
- Prise en charge par Tk de SVG, des hautes densités DPI, des notifications système et du Dark Mode Windows/macOS
- Profil
strictpar défaut, qui signale immédiatement une erreur en cas d’incohérence d’encodage
- Il existe aussi des changements de compatibilité
- Le changement de taille des pointeurs peut casser des scripts incluant du code C
critcl - Dans Tcl 8.x,
010vaut 8 en octal, mais dans Tcl 9 il vaut 10 en décimal ; l’octal utilise le préfixe0o - Le BOM UTF-8
U+FEFFn’est plus supprimé automatiquement, il faut donc le retirer explicitement si nécessaire
- Le changement de taille des pointeurs peut casser des scripts incluant du code C
- Tcl 8.6 peut encore être utilisé pour du développement CLI/GUI général, mais la version 9.0, avec ses améliorations de sécurité et d’UI, est recommandée pour les nouveaux projets
- Parmi les petites implémentations, on trouve Jim TCL, d’environ 100 à 200 ko, et Picol, écrit en moins de 1 000 lignes de code C
Widgets Tk et apparence moderne
- Tk n’expose pas directement Win32, X11 ni Cocoa, mais les abstrait via des commandes de widgets et des liaisons d’événements
- Les premiers Tk ont laissé une impression datée à cause de leurs widgets classiques gris et anguleux, mais
ttkfournit des widgets plus proches des thèmes du système d’exploitation- Les thèmes inclus par défaut sont
alt,default,clametclassic - Les anciennes applications peuvent remplacer les widgets classiques par
ttk::treeview,ttk::notebook,ttk::progressbar, etc.
- Les thèmes inclus par défaut sont
- L’applet de calcul de prêt immobilier de 1996 fonctionnait encore avec Tcl 9.0.3 ; sa version modernisée ajoute
grid, la validation des entrées, l’apport initial, la prise en charge du DPI et un canevas réactif- L’original compte 188 lignes hors commentaires et lignes vides, tandis que la version modernisée atteint environ 250 lignes avec les nouvelles fonctions
- Le même script s’exécute sur Windows 10, Linux Mint, tablette et téléphone Android, ainsi que sur SBC ARM
- Tcl/Tk 9.0 s’agrandit de façon presque proportionnelle aux résolutions 96 DPI et 144 DPI sous Windows ; il faut privilégier les unités relatives et le padding plutôt que les pixels fixes
- Pour apprendre la hiérarchie des widgets, les chemins à base de points, la mise en page et les événements, il est recommandé de suivre le tutoriel TkDocs
Boucle d’événements et couplage lâche
- La boucle d’événements de Tcl traite, dans un seul thread et dans l’ordre de la file, la souris et le clavier, les fichiers et canaux, ainsi que les callbacks ; elle démarre en arrière-plan lorsque Tk est chargé
- Le treeview et la scrollbar sont des widgets frères qui ne se contiennent pas l’un l’autre ; ils échangent des préfixes de commande pour mettre à jour leur position dans les deux sens
- Tk peut transmettre à des widgets des événements virtuels comme
<<UI:Request:Submit>>, accompagnés d’une charge utiledict - Un
EventManagerréutilisable peut gérer sous forme de dictionnaire la liste des abonnés par événement et n’appelerevent generateque sur les widgets existants- Il joue un rôle similaire aux Events/Delegates de C#, à
CustomEventen JavaScript, ou à PyPubSub et blinker en Python - Il permet de transmettre les résultats de validation à plusieurs abonnés — popup, inspector, bouton
Send, etc. — sans référence directe
- Il joue un rôle similaire aux Events/Delegates de C#, à
- Même en Tcl pur, on peut créer un gestionnaire d’événements qui appelle des callbacks d’abonnés, et l’utiliser pour une animation console basée sur un
tickde 50 ms ou pour le défilement synchronisé de plusieurs canvas - Une conception d’événements centrée sur les données convient aux systèmes de type MVC séparant UI et logique, et correspond aux étapes de PIOSEE : sélection d’événement, collecte d’informations, décision stratégique, exécution et évaluation
Connexion avec Python et les processus externes
tkinteren Python est un wrapper de Tk, mais ses exemples anciens et son thème par défaut peuvent donner l’impression que Tk lui-même est dépassé- Pour une apparence moderne, il faut utiliser explicitement
from tkinter import ttkainsi quettk.Label,ttk.Button, etc.
- Pour une apparence moderne, il faut utiliser explicitement
- Il est recommandé d’utiliser Tk dans Tcl, pour lequel il a été conçu à l’origine, et de séparer Python dans une couche de traitement des données
- Les tâches Python ponctuelles se connectent avec
exec, tandis que les tâches asynchrones persistantes se connectent via un pipeopen "|python3 -u script.py" r+- Avec du non-bloquant, du line buffering et
fileevent, l’interface graphique reste réactive pendant l’exécution de traitements NumPy/Pandas
- Avec du non-bloquant, du line buffering et
- En connectant de la même manière des processus enfants natifs, par exemple en C#, le processus d’interface reste isolé même si le processus de calcul plante ou consomme tout le CPU
- L’EOF d’un pipe étant lui aussi un événement readable, la fonction de traitement doit vérifier
[eof $pipe]afin d’éviter les callbacks infinis
Représentation des valeurs, structures de données et performances
- « Everything is a String » signifie que toute valeur possède une représentation canonique sous forme de chaîne, pas qu’elle est toujours stockée comme chaîne
Tcl_Objest un objet dual-ported qui gère à la fois une représentation chaîne UTF-8 et une représentation interne comme integer, list, dict ou byte array- La régénération de la représentation interne lorsque le type nécessaire change s’appelle le shimmering
- Pour réduire le coût des conversions et éviter la corruption des données, il faut continuer à utiliser
lappend/lindexpour les listes,dictpour les dictionnaires etbinarypour le binaire tcl::unsupported::representationpermet de diagnostiquer le pointeur d’objet et la représentation interne
- Pour réduire le coût des conversions et éviter la corruption des données, il faut continuer à utiliser
- Tcl utilise le Copy-on-Write : lors d’une affectation de valeur, il ne copie pas immédiatement, mais duplique l’objet partagé au moment de sa modification réelle
- Pour les binaires comme les PNG, il faut définir
-translation binarysur le canal et utiliserbinary encode/decodeafin d’éviter les conversions CR/LF et UTF-8 dict setcrée automatiquement les chemins intermédiaires, etdict withainsi quedict updatepermettent de modifier des valeurs imbriquées comme des variables locales- Les clés dupliquées sont résolues selon le principe Last Writer Wins, où la dernière valeur est conservée
- Les listes conviennent aux données ordonnées et aux structures de type matrice, tandis que les dictionnaires sont adaptés aux données clé-valeur imbriquées générales
Tableaux, namespaces et TclOO
- Les namespaces sont des conteneurs dynamiques de variables et de commandes ;
namespace ensemblepermet de créer des dispatchers commeLogger log - Les variables et les commandes utilisent des tables de hachage distinctes, ce qui permet à un même nom d’exister simultanément dans les deux espaces ;
info vars,info commandsetinfo procspermettent d’inspecter la structure à l’exécution - Un Array Tcl est une table de hachage plate pointant vers des variables individuelles
- Il convient aux collections à clés dynamiques, comme l’état d’une UI, et permet de lier ou de tracer des éléments individuels à des widgets
- Pour une procédure, il faut passer le nom du tableau et relier un alias à l’original avec
upvar
- Il est recommandé d’utiliser des namespaces pour les états globaux/singletons à clés fixes, et des tableaux pour les collections à clés dynamiques
- TclOO, inclus dans le cœur depuis Tcl 8.6, fournit classes, objets, héritage, constructeurs et destructeurs sur la base des namespaces et du dispatch de commandes
- Un objet est une véritable commande comme
::oo::Obj42et stocke son état dans un namespace dédié oo::definepermet de modifier une classe à l’exécution, etoo::objdefineun objet particuliermymethodcrée un callback de méthode d’objet complet à passer àafter, etc.
- Un objet est une véritable commande comme
- TclOO ne dispose pas de ramasse-miettes : les objets doivent être supprimés explicitement avec
$obj destroy- On peut gérer leur durée de vie avec
try/finallyou unmanaged_createbasé sur des traces de variables - Les channels doivent eux aussi être fermés avec
close, etmanaged_channelpermet de les nettoyer automatiquement à la sortie du scope
- On peut gérer leur durée de vie avec
- Les widgets Tk restent également des commandes, mais détruire un widget parent avec
destroysupprime aussi tous ses enfants
Coroutines et threads
- Les coroutines Tcl sont des coroutines avec pile qui conservent toute la pile d’appels et reprennent après un
yielden préservant les variables locales et le point d’exécution - En combinant
afteret les coroutines, on peut gérer de façon non bloquante, dans la boucle d’événements, les téléchargements, les machines à états, les animations et les opérations réseau- En CLI pure,
vwaitest nécessaire pour maintenir le processus en vie, tandis que dans une appli Tk, le gestionnaire de fenêtres maintient la boucle d’événements coroutine::utildetcllibfournit des wrappers compatibles coroutines poursocket,getsetread
- En CLI pure,
- Les coroutines partageant un seul thread CPU, un calcul long bloque toute l’UI ; ce type de tâche doit être séparé via le package Thread
- Tcl Thread repose sur un modèle shared-nothing, avec un interpréteur isolé par thread
- Les messages sont transmis avec
thread::send, et TSV fournit des valeurs partagées protégées par mutex - La propriété des canaux est transférée avec
thread::transfer,detachetattach
- Les messages sont transmis avec
- Un thread pris dans une boucle infinie ne revient pas à la file d’événements et ne peut pas être arrêté de force de manière sûre
- Sur un AMD 5950X, la création de 32 threads enfants a fait passer la mémoire de 24 Mo à 44 Mo, soit environ 0,6 Mo par interpréteur
- Le threading Tcl sert davantage à la réactivité de l’UI et à l’orchestration des E/S qu’à concurrencer les performances de calcul
- Dans un test de 100 millions de calculs de racine carrée, C# compilé AoT a pris 0,24 s, contre 16,8 s pour Tcl, soit environ 70 fois plus
Séparer les calculs avec C·C#
critclcompile, lors de la première exécution, du code C·C++ intégré dans un script Tcl et le charge comme commande native- En développement,
gccouclangest nécessaire ; une fois terminé, on peut précompiler et distribuer le tout sous forme de package.dll·.so
- En développement,
- Les sections critiques pour les performances, comme Mandelbrot ou Fibonacci, peuvent être déplacées en C, mais manipuler directement les structures mémoire Tcl/C est délicat
- Une alternative consiste à garder Tcl/Tk comme fine couche d’UI et à confier les calculs à un processus séparé : c’est le sidecar pattern
- BFlat compile C# en binaire natif autonome et prend en charge Windows, Linux et Android
- Une CLI de calcul numérique de base peut faire environ 900 Ko sous Windows, et moins de 500 Ko après compression UPX
- En la combinant à l’interpréteur Tcl d’environ 3 Mo, on peut constituer une appli par plateforme d’environ 3 à 4 Mo
ZipFS et distribution en fichier unique
- Avant Tcl 9, on utilisait les Starpack, qui associaient un Starkit à Tclkit, mais ils dépendaient d’outils séparés comme Metakit et SDX
- ZipFS dans Tcl 9 monte un ZIP comme système de fichiers virtuel en lecture seule
//zipfs:/ - Zipkit combine un
tclsh·wishlié statiquement avec un ZIP d’application, et exécutemain.tclau démarrage- Des cibles sont fournies pour Windows x86/x86_64, macOS Intel·Apple Silicon, Linux x86_64/arm64/RISC-V 64 bits et les familles Solaris
- Il suffit de remplacer le Zipkit modèle pour cross-packager un binaire destiné à un autre OS
- ZipFS est né de l’implémentation VFS d’AndroWish, qui devait lire directement les fichiers à l’intérieur des APK, avant d’être fusionné dans le cœur de Tcl
- Si l’on inclut des
.dll·.sopropres à une plateforme, il faut détecter la plateforme d’exécution et choisir la bonne extension
AndroWish et Decent Espresso
- L’application DE1 de Decent Espresso est, en avril 2026 encore, une application Tcl/Tk exécutée dans AndroWish
- La tablette n’est pas un client de serveur distant : elle utilise une architecture local-first où elle agit comme pair de la machine à café
- AndroWish mappe les commandes de dessin Tk vers des textures SDL2 afin de gérer des visualisations à haute fréquence même sur des tablettes Android modestes
- L’extension
borgfournit le Bluetooth, les notifications, les vibrations, la voix, la localisation et les événements d’état Android - En mai 2026, seul Tcl/Tk 8.6 est pris en charge, donc les commandes propres à Tcl 9 ne sont pas utilisables
- L’extension
- Le SDK AndroWish crée des APK incluant les scripts ; en supprimant les extensions inutiles, on peut réduire environ 30 Mo à 4–10 Mo
undrowishest un interpréteur en fichier unique permettant de tester le même environnement SDL sous Windows·Linux, mais il n’inclut pasborgd’Androidtkconclientpermet de se connecter à distance depuis un PC à l’interpréteur Android, mais il n’a pas de mot de passe et ne doit donc être utilisé qu’en développement- Tk a des limites pour l’adaptation automatique des images raster selon les résolutions Android et pour les UI tactiles plein écran ; Decent Espresso a donc implémenté sa propre UI à base de skins
Wapp, DSL et sandbox
- Wapp est un framework web Tcl centré sur un fichier unique, créé par D. Richard Hipp
- Il prend en charge son propre serveur de sockets, CGI·SCGI, et gère par défaut le décodage des URI ainsi que le nettoyage des paramètres
- Il est utilisé par l’application de checklist qui gère le processus de publication de SQLite et par l’UI web de Fossil
- En combinant htmx avec un peu de CSS, on peut créer des applications web centrées sur des procédures Tcl sans JavaScript
- Si l’accès distant·mobile est indispensable, Wapp est recommandé ; pour les outils locaux, Tk, qui s’intègre directement au système d’exploitation, est conseillé
- Tcl est bien adapté à la création de DSL, car même les boucles et les conditions sont des commandes
- Avec
unknown,upleveletupvar, on peut créer des commandes métier commecheckout 1000 USD - En n’exposant que les commandes autorisées dans un Safe Interpreter, on peut construire des environnements de script restreints pour la banque ou l’EDA
- Avec
- On peut aussi créer des commandes de type macro pour générer des étapes de post-traitement de chaînes ou des flux d’exécution propres à une application
Fonctionnalités natives des systèmes d’exploitation
- Tcl/Tk appelle non seulement des commandes communes, mais aussi des API propres aux plateformes via des extensions
- TWAPI sous Windows fournit des API bas niveau proches du Windows SDK ainsi que des interfaces de commodité
twapi::shell_execute -verb runaspermet de demander une élévation de privilèges UAC- Il donne accès aux dates de création·modification des fichiers, aux raccourcis clavier globaux, aux services et aux fonctions Windows
- Dans l’exemple d’un utilitaire assistant pour Adobe DNG Converter, les RAW récents sont convertis en DNG compatibles CS6, puis les dates de création·modification des fichiers d’origine sont restaurées avec TWAPI
- Tcl pur ne peut gérer que les dates de modification·accès ; TWAPI est donc nécessaire pour restaurer la date de création sous Windows
Contraintes et discipline de développement
- Tcl fait davantage peser la charge de l’exactitude sur la discipline du développeur que sur le compilateur
- Une mauvaise compréhension de la différence de substitution entre
{}et""peut entraîner une double substitution et des vulnérabilités de sécurité - Les
dict get,expretformatimbriqués doivent être décomposés en variables intermédiaires pour rester lisibles - Redéfinir excessivement le langage peut aboutir à un système de commandes personnalisé difficile à maintenir
- Une mauvaise compréhension de la différence de substitution entre
- Tcl distingue l’existence d’une variable et la chaîne vide plutôt que d’utiliser
null, et le vérifie avecinfo exists- Insérer une chaîne vide dans une expression arithmétique provoque une erreur, au lieu d’être automatiquement converti en 0 ou en NaN
- Il n’est pas adapté à la 3D temps réel, à l’audio ni aux grands calculs matriciels
- Tcl3D·Canvas3d et des commandes audio externes sont utilisables, mais ce n’est pas son usage principal
- Traiter une matrice de 1 Go sous forme de chaînes·listes entraîne des coûts élevés de gestion des objets ; une bibliothèque C ou un processus de calcul séparé est plus approprié
- Les points forts de Tcl sont l’orchestration à base de coroutines·threads, les E/S et les événements, les couches de présentation Tk·CLI, les tests et l’automatisation
Paquets et environnement de développement
- Tcl ne dispose pas d’un gestionnaire central de paquets universel équivalent à
npmoupip, etteacup/teapotd’ActiveTcl sont pour l’essentiel devenus legacy - La distribution Batteries Included fournit des paquets validés avec l’environnement
- Magicsplat propose une sélection de paquets Tcl/Tk 9 principalement centrée sur Windows
- BAWT est un framework de build maximaliste qui produit des distributions incluant des extensions pour plusieurs plateformes et CPU
- Selon la configuration, il est possible de regrouper les principaux paquets de l’écosystème dans environ 35 Mo
- L’absence de gestionnaire central ne rend pas automatiquement l’ensemble plus sûr, mais elle offre l’avantage de pouvoir figer toutes les dépendances et les analyser une fois pour toutes
- En raison de la génération dynamique de commandes dans Tcl, l’analyse statique et l’autocomplétion sont difficiles, et Nagelfar ne peut pas vérifier complètement les commandes inconnues ni les redéfinitions à l’exécution
- Dans VSCode et VSCodium, on peut utiliser Tcl by bitwisecook, Tcl Navigation and Tools et Code Runner
Installation par plateforme
- Sous Windows, installer Magicsplat Tcl/Tk à l’échelle du système permet de configurer le PATH ainsi que les associations
.tclappet.tkapp - Sur les distributions Debian/Ubuntu, les paquets suivants permettent d’installer Tcl, Tk, SQLite, TLS, les images et Thread
sudo apt-get install tcl tk libsqlite3-tcl sqlite-tcl tcltls tcllib libtk-img tcl-thread
- De nombreux dépôts Linux LTS fournissent Tcl 8.6, tandis que des builds incluant des extensions Tcl 9 sont disponibles via tcl-builds-with-libxft
- Tk a déjà été observé en fonctionnement non seulement avec X11, mais aussi dans des environnements Wayland comme Zorin OS 18
- Le Tcl 8.5 fourni par défaut avec macOS étant destiné à la compatibilité legacy, il est recommandé de l’éviter pour le développement Tcl/Tk moderne
- Tcl/Tk 9 peut être installé via Homebrew, MacPorts ou des builds expérimentaux BAWT
- Sur Apple Silicon, il faut placer
/opt/homebrew/opt/tcl-tk/binau début du PATH afin qu’il soit prioritaire sur le Tcl du système
Ressources d’apprentissage et appréciation finale
- The Tcl 9 Programming Language est une ressource avancée qui traite en profondeur de Tcl 9 pur ; pour en comprendre toutes les fonctionnalités, il est recommandé de la relire plusieurs fois et de suivre soi-même les exemples
- TkDocs couvre Tk moderne,
grid, la boucle d’événements et les anciennes techniques à éviter - Les ressources Tutorialspoint ne sont pas recommandées, car elles incluent des méthodes d’installation obsolètes et des pratiques comme
exprsans accolades - Les REPL de
tclshetwishaffichent l’usage attendu lorsqu’un mauvais argument est saisi, ce qui permet de les utiliser, avec la documentation, comme outils d’apprentissage par l’expérimentation - Tcl/Tk n’est pas un écosystème à la mode ni doté d’une grande communauté, mais il reste une boîte à outils généraliste pour les petites équipes et les industries critiques qui privilégient la compatibilité et la cohérence à long terme
- Il convient aux cas où l’on recherche une « boring technology » capable de fonctionner pendant des décennies plutôt qu’une stack qui évolue rapidement, et où l’on a besoin d’une couche CLI, GUI, automatisation ou orchestration plutôt que d’un moteur de calcul
Aucun commentaire pour le moment.