Nouvelles commandes et fonctions du noyau Tcl

La version 9.1.0, publiée le 29 septembre 2026, introduit la commande unicode qui expose la normalisation Unicode via les routines C Tcl_UtfToNormalized*. Cette capacité permet aux scripts de garantir la cohérence des chaînes avant toute comparaison, évitant les divergences liées aux formes de composition. Le nouveau timer fournit un horloge monotone avec une résolution microsecondes, indispensable pour les mesures de latence où les horloges système peuvent être ajustées. La commande lfilter offre un filtrage déclaratif de listes, réduisant le besoin de boucles explicites et améliorant la lisibilité du code. interp set rend possible l’accès direct aux variables d’un interpréteur enfant, simplifiant la communication inter‑interprète sans recourir à des extensions tierces. Les options supplémentaires de subst (-backslashes, -commands, -variables) et de switch (-integer) renforcent le contrôle lexical et le traitement des valeurs numériques.

Extensions C, API temporelles et gestion du système de fichiers

Le runtime exige désormais l’appel d’une routine d’initialisation (Tcl_FindExecutable ou TclZipfs_AppHook) avant toute utilisation, ce qui garantit la configuration correcte du répertoire d’exécution et prévient les erreurs d’initialisation tardive. De nouvelles fonctions C, dont Tcl_IsEmpty, Tcl_GetEncodingNameForUser et Tcl_AttemptCreateHashEntry, enrichissent l’API de base pour la manipulation de chaînes et de tables de hachage. Les routines de liste (Tcl_ListObjRange, Tcl_ListObjRepeat, Tcl_ListObjReverse) offrent des opérations de découpage, de réplication et d’inversion directement en C, réduisant le coût d’appel depuis le script. Le remplacement de Tcl_Time par une API temporelle utilisant long long améliore la précision et la portée des mesures, notamment sur les plateformes 64 bits. Le système de fichiers gagne en robustesse : les chemins sur macOS deviennent insensibles à la casse, tandis que auto_execok et la recherche d’exécutable sont refondus sous Windows, limitant les ambiguïtés de résolution.

Améliorations de Tk : accessibilité, RTL et nouveaux widgets

Tk 9.1 ajoute un support de base pour les lecteurs d’écran, ouvrant la voie à des applications graphiques conformes aux exigences d’accessibilité. Le texte bidirectionnel (RTL) est désormais géré, ce qui bénéficie aux langues comme l’arabe ou l’hébreu. Le widget ttk::toggleswitch propose un interrupteur visuel natif, tandis que la commande tk attribtable expose les attributs du système d’exploitation aux scripts. Le sous‑système send a été revu pour Aqua, améliorant la communication inter‑processus sous macOS. La prise en charge des distances d’écran négatives permet des placements dynamiques d’objets hors du cadre visible, utile pour les animations. Les états étendus de ttk::treeview et ttk::notebook offrent plus de granularité dans la gestion de l’interaction utilisateur. Les améliorations de Tk_CanvasTextInfo et le texte tourné sur les labels enrichissent les possibilités de rendu typographique. Les boîtes de dialogue sont limitées à la largeur physique de l’écran, évitant les débordements sur les résolutions élevées, et la sélection des listes a reçu une palette de couleurs plus claire. Le support obsolète de l’apparence Windows XP a été retiré, réduisant la charge de maintenance.

Implications pratiques et limites

Ces ajouts renforcent la capacité de Tcl/Tk à servir d’infrastructure pour des applications modernes nécessitant une gestion fine du texte Unicode et des performances temporelles élevées. Cependant, la contrainte d’initialisation obligatoire peut casser des scripts legacy qui omettent cet appel, imposant une migration contrôlée. L’absence de documentation détaillée sur les nouvelles options subst et switch dans le communiqué officiel laisse les développeurs dépendants de l’exploration manuelle du code source. Enfin, le retrait du support Windows XP élimine une cible d’entreprise encore présente dans certains environnements industriels, ce qui pourrait freiner l’adoption immédiate dans ces contextes.