1 puntos por GN⁺ 6 시간 전 | Aún no hay comentarios. | Compartir por WhatsApp
  • Tcl/Tk es un conjunto de herramientas con licencia BSD que permite crear tanto CLI como GUI de apariencia nativa en Windows, Linux y macOS, y admite eventos e I/O no bloqueantes, además de threading aislado.
  • Tcl es un lenguaje centrado en comandos que interpreta la primera palabra como comando y trata el código y los datos como cadenas; Tk abstrae las interfaces de usuario de cada sistema operativo mediante widgets y eventos.
  • Tcl/Tk 9.0, lanzado el 13 de noviembre de 2025, agrega 64 bits, Unicode completo, codificación estricta, empaquetado de archivo único con ZipFS, SVG, DPI de alta resolución y Dark Mode, aunque introduce cambios de compatibilidad para parte del código existente.
  • Se ha usado durante mucho tiempo en git gui, herramientas FPGA/EDA, Cisco IOS, entornos operativos de la ESA, compilación y pruebas de SQLite, la app Decent Espresso, entre otros; hay casos de scripts de la década de 1990 que aún se ejecutan en versiones recientes.
  • Más que para grandes cálculos numéricos, resulta adecuado como lenguaje pegamento para UI basadas en eventos, automatización, I/O, DSL y coordinación de procesos nativos; los cálculos pueden delegarse a componentes externos como C, C# o Python.

Por qué elegir Tcl/Tk

  • Tcl/Tk permite armar un entorno de aproximadamente 100 MB o menos, incluso incluyendo paquetes comunes, y crear apps pequeñas de archivo único para cada plataforma soportada, así como apps web.
  • La licencia BSD permite modificar, redistribuir y vender la totalidad o partes del software, y la comunidad de Tcl mantiene el core y las versiones.
  • Otras opciones de GUI evaluadas tenían las siguientes limitaciones:
    • AutoHotkey v2 es adecuado para herramientas pequeñas en Windows, pero es solo para Windows y no garantiza llamadas nativas bajo Wine.
    • C# WinForms depende de la API de Windows, mientras que MAUI y Avalonia tienen muchas dependencias y vuelven engorroso el desarrollo pequeño no empresarial.
    • Las apps web locales tipo Electron requieren gestionar la comunicación entre frontend y backend, conflictos de puertos y seguridad; incluso un navegador vacío puede consumir más de 100 MB.
    • Una ventana simple creada con Fyne o Gio en Go tenía unas 40 mil dependencias indirectas y un binario estático de más de 30 MB, y no se veía como una app nativa.
    • Qt complica la configuración por MOC, los límites nativos de signals/slots y las licencias GPL/LGPL o comerciales.
  • Muchos frameworks GUI modernos dibujan directamente sobre un canvas en vez de usar las API de UI del sistema operativo, y empaquetan todo el entorno de ejecución por OS y CPU, lo que dificulta lograr una apariencia nativa.

Tcl, diseñado como lenguaje pegamento

  • Tcl, presentado por John Ousterhout en 1990, fue diseñado como pegamento arquitectónico para conectar código de bajo nivel de alto rendimiento con una capa lógica legible por humanos.
    • Bridge: conecta código como C++ o Rust con una UI de alto nivel.
    • Orchestrate: controla el flujo de datos entre programas y módulos.
    • Wrap: expone tareas internas complejas como comandos de script simples.
  • Tk es un toolkit GUI multiplataforma que complementa la interacción por línea de comandos de Tcl y puede cargarse con package require Tk.
  • El pequeño core en C de Tcl soporta Windows, Linux, macOS y ARM, x86 y RISC-V.
    • Para Android se puede usar Termux en CLI y AndroWish para GUI.
  • Ousterhout recibió en 1997 el ACM Software System Award por su contribución al desarrollo de sistemas de software con impacto sostenido.

Casos industriales de uso prolongado

  • Tcl se ha usado durante cerca de 40 años en entornos donde la confiabilidad, la compatibilidad hacia atrás y la portabilidad son importantes.
    • git gui y gitk, incluidos en Git
    • Lenguaje de automatización para herramientas de diseño FPGA y de chips de Xilinx, Altera, Cadence, entre otras
    • Cisco IOS Embedded Event Manager
    • GUI internas para granjas de simulación y testers de hardware de Intel, NVIDIA y AMD
    • Calibre y Virtuoso de Siemens EDA
    • Entornos operativos ESTEC y ESOC de la ESA
  • La misma herramienta Tcl/Tk puede ejecutarse sin recompilar desde terminales de centrales nucleares hasta una Raspberry Pi.
  • SQLite se creó originalmente como una extensión de Tcl, y la mitad de sus pruebas está escrita en Tcl.
    • Tcl también actúa como “ensamblador”: posprocesa más de 125 archivos de entrada en C para generar el código fuente final de SQLite, de más de 200 mil líneas.

Componentes de instalación y formas de ejecución

  • Una instalación típica incluye los siguientes componentes:
    • tclsh: intérprete CLI
    • wish: shell GUI con Tk y loop de eventos
    • Tcllib y Tklib: bibliotecas como http, csv, json, aes, tooltip, dateentry, entre otras
    • Paquetes de extensión como Thread, TLS y drag and drop
  • Si se ejecuta sin argumentos, abre un REPL que permite ingresar comandos, pegar scripts y ejecutar archivos mediante source.
  • Si se le pasa un archivo, como tclsh myscript.tcl o wish app.tkapp, se ejecuta en modo batch no interactivo.
  • En Windows, wish es una aplicación GUI, por lo que usa Tk Console en lugar de una consola real; si se bloquea el hilo de UI, la salida también puede parecer detenida.
  • Para aprender, se recomienda tclsh, que proporciona entrada y salida estándar en todas las plataformas y también puede cargar Tk.

Sintaxis centrada en comandos de Tcl

  • El código fuente Tcl se compone de palabras separadas por espacios: la primera palabra siempre es el comando y las demás son argumentos.
  • Los principales elementos sintácticos son:
    • set: establece o consulta una variable.
    • $name: sustituye el valor de una variable.
    • proc: define un procedimiento que funciona como un nuevo comando.
    • [...]: ejecuta el script interno y lo sustituye por su resultado.
    • {...}: agrupa como un solo argumento sin sustitución.
    • "...": agrupa como un solo argumento, pero realiza sustituciones de $, [] y \.
    • {*}: expande una lista en múltiples argumentos.
    • ::: especifica rutas globales o de namespace.
    • Saltos de línea y ;: separan comandos.
  • En string range "Tcl Programming" 0 2, string es un ensamble que despacha al subcomando range y devuelve Tcl.
  • if, while y return tampoco son palabras reservadas, sino comandos comunes.
    • while evalúa repetidamente las cadenas de condición y cuerpo.
    • Con uplevel se pueden crear estructuras de control definidas por el usuario, como repeat ... until|while ....
    • return transmite códigos de finalización como TCL_OK, TCL_ERROR, TCL_RETURN, TCL_BREAK y TCL_CONTINUE.

Homoiconicidad y sustitución segura

  • En Tcl, tanto el código como los datos son cadenas compuestas por palabras, por lo que un mismo valor puede interpretarse como lista, dato o comando ejecutable.
  • Al desplegar una lista con {*}$userinput, el primer elemento se convierte en comando y los demás en argumentos; si no se agrupan correctamente los argumentos con espacios, pueden producirse problemas como errores de nombre de canal.
  • Esta homoiconicidad facilita los DSL y la extensión de estructuras de control, pero también genera cargas de integridad y seguridad porque los datos pueden convertirse en código ejecutable.
  • Los callbacks deben construirse con [list command $arg] para preservar los límites de los argumentos que contienen espacios y caracteres especiales.
  • Las expresiones de expr e if siempre deben envolverse en {...} para evitar sustitución doble e inyección de comandos, y para permitir la optimización a bytecode.
  • Safe Interpreter bloquea por defecto el acceso al sistema de archivos, sockets y bibliotecas externas, y expone solo las funciones permitidas mediante interp alias.

Cambios en Tcl/Tk 9.0

  • El Tcl/Tk Core Development Team lanzó la versión 9.0 el 13 de noviembre de 2025, 12 años después de Tcl 8.6
  • Los principales cambios son los siguientes
    • Transición completa a 64 bits y soporte para todos los puntos de código Unicode
    • ZipFS, que monta ZIP como sistema de archivos virtual
    • Soporte en Tk para SVG, DPI de alta resolución, notificaciones del sistema y Dark Mode de Windows y macOS
    • Perfil strict predeterminado, que genera errores de inmediato ante inconsistencias de codificación
  • También hay cambios de compatibilidad
    • Debido al cambio en el tamaño de los punteros, pueden dejar de funcionar scripts que incluyan código C de critcl
    • En Tcl 8.x, 010 es el 8 en octal, pero en Tcl 9 es el 10 en decimal, y los octales usan el prefijo 0o
    • El BOM UTF-8 U+FEFF no se elimina automáticamente, por lo que, si es necesario, hay que recortarlo explícitamente
  • Tcl 8.6 también puede usarse para desarrollo general de CLI y GUI, pero para proyectos nuevos se recomienda 9.0 por sus mejoras de seguridad y de UI
  • Entre las implementaciones pequeñas están Jim TCL, de unos 100~200 kB, y Picol, con menos de 1.000 líneas de código C

Widgets de Tk y apariencia moderna

  • Tk no expone directamente Win32, X11 ni Cocoa, sino que los abstrae mediante comandos de widgets y enlaces de eventos
  • El Tk inicial dejó una impresión anticuada por sus widgets clásicos grises y angulosos, pero ttk ofrece widgets más cercanos al tema del sistema operativo
    • Los temas incluidos por defecto son alt, default, clam y classic
    • Las apps antiguas pueden reemplazar los widgets clásicos por ttk::treeview, ttk::notebook, ttk::progressbar, etc.
  • Un applet de calculadora hipotecaria de 1996 también se ejecutó en Tcl 9.0.3, y la versión modernizada agregó grid, validación de entrada, pago inicial, adaptación a DPI y un canvas responsivo
    • El original tiene 188 líneas excluyendo comentarios y líneas en blanco; la versión modernizada, unas 250 líneas incluyendo las nuevas funciones
    • El mismo script se ejecuta en Windows 10, Linux Mint, tablets y teléfonos Android, y SBC ARM
  • Tcl/Tk 9.0 escala casi proporcionalmente en 96 DPI y 144 DPI en Windows, y conviene usar unidades relativas y padding en lugar de píxeles fijos
  • Se recomienda aprender la jerarquía de widgets, las rutas basadas en puntos, el layout y los eventos con el tutorial de TkDocs

Bucle de eventos y acoplamiento flexible

  • El bucle de eventos de Tcl procesa mouse y teclado, archivos y canales, y callbacks en orden de cola dentro de un único thread; al cargar Tk, se inicia en segundo plano
  • treeview y scrollbar son widgets sibling que no se contienen entre sí, e intercambian prefijos de comando para actualizar la posición en ambos sentidos
  • Tk puede adjuntar un payload dict a eventos virtuales como <<UI:Request:Submit>> y entregarlo a los widgets
  • Un EventManager reutilizable puede administrar en un diccionario la lista de suscriptores por evento y llamar a event generate solo en widgets existentes
    • Cumple un rol similar a Events/Delegates de C#, CustomEvent de JavaScript y PyPubSub o blinker de Python
    • Permite entregar resultados de validación a varios suscriptores, como un popup, un inspector o el botón Send, sin referencias directas
  • Incluso en Tcl puro se puede crear un gestor de eventos que invoque callbacks de suscriptores, y usarlo para animaciones de consola basadas en tick de 50 ms o scroll sincronizado de varios canvas
  • El diseño de eventos centrado en datos es adecuado para sistemas de tipo MVC que separan UI y lógica, y se corresponde con las etapas de PIOSEE: selección de eventos, recolección de información, decisión de estrategia, ejecución y evaluación

Conexión con Python y procesos externos

  • tkinter de Python es un wrapper de Tk, pero los ejemplos antiguos y el tema predeterminado pueden dar la impresión de que Tk en sí está desactualizado
    • Para una apariencia moderna, hay que usar explícitamente from tkinter import ttk y ttk.Label, ttk.Button, etc.
  • Se recomienda usar Tk desde Tcl, para el que fue diseñado originalmente, y separar Python como capa de procesamiento de datos
  • Las tareas puntuales de Python se conectan con exec, y las tareas asíncronas persistentes con un pipe open "|python3 -u script.py" r+
    • Si se usan modo no bloqueante, line buffering y fileevent, la GUI puede mantener la capacidad de respuesta mientras ejecuta tareas de NumPy o Pandas
  • Si se conectan procesos hijo nativos, como C#, del mismo modo, el proceso de UI queda separado incluso si el proceso de cálculo falla o consume toda la CPU
  • El EOF del pipe también es un evento readable, así que la función de manejo debe comprobar [eof $pipe] para evitar callbacks infinitos

Representación de valores, estructuras de datos y rendimiento

  • “Everything is a String” significa que todos los valores tienen una representación canónica en forma de cadena, no que siempre se almacenen como cadenas
  • Tcl_Obj es un objeto dual-ported que administra tanto la representación de cadena UTF-8 como representaciones internas como integer, list, dict y byte array
  • La recreación de la representación interna cuando cambia el tipo necesario se llama shimmering
    • Para listas conviene seguir usando lappend y lindex; para dicts, dict; y para binarios, el comando binary, para reducir costos de conversión y daños en los datos
    • Con tcl::unsupported::representation se pueden diagnosticar el puntero del objeto y la representación interna
  • Tcl usa Copy-on-Write: no copia de inmediato al asignar valores, sino que duplica los objetos compartidos cuando realmente se modifican
  • Para binarios como PNG, hay que configurar -translation binary en el canal y usar binary encode/decode para evitar conversiones CR/LF y UTF-8
  • dict set crea automáticamente rutas intermedias, y con dict with y dict update se pueden modificar valores anidados como si fueran variables locales
    • Las claves duplicadas se resuelven con el método Last Writer Wins, conservando el último valor
  • Las listas son adecuadas para datos ordenados y estructuras matriciales; los diccionarios, para datos generales anidados de clave-valor

Arrays, namespaces y TclOO

  • Los namespaces son contenedores dinámicos de variables y comandos, y con namespace ensemble se puede crear un dispatcher como Logger log
  • Las variables y los comandos usan tablas hash separadas, por lo que puede existir simultáneamente el mismo nombre, y con info vars, info commands e info procs se puede inspeccionar la estructura en tiempo de ejecución
  • Tcl Array es una tabla hash plana que apunta a variables individuales
    • Es adecuada para colecciones con claves dinámicas, como el estado de la UI, y permite enlazar o hacer trace de elementos individuales con widgets
    • A los procedimientos hay que pasarles el nombre del array y usar upvar para enlazar un alias al original
  • Se recomienda usar namespaces para estado global o singleton con claves fijas, y arrays para colecciones con claves dinámicas
  • TclOO, incluido en el core desde Tcl 8.6, ofrece clases, objetos, herencia y constructores/destructores sobre la base de namespaces y dispatch de comandos
    • Un objeto es un comando real como ::oo::Obj42, y guarda su estado en un namespace dedicado
    • Con oo::define se pueden cambiar clases en tiempo de ejecución, y con oo::objdefine, objetos específicos
    • mymethod crea un callback completo de método de objeto para pasarlo a after, entre otros
  • TclOO no tiene garbage collection, por lo que los objetos deben eliminarse explícitamente con $obj destroy
    • La vida útil puede administrarse con try/finally o con managed_create basado en trace de variables
    • Los channel también requieren close, y con managed_channel pueden limpiarse automáticamente al salir del scope
  • Los widgets de Tk también quedan como comandos, pero al hacer destroy del widget padre se eliminan junto con él todos sus hijos

Corrutinas e hilos

  • Las corrutinas de Tcl son corrutinas stackful que mantienen toda la pila de llamadas y se reanudan después de yield conservando las variables locales y el punto de ejecución
  • Al combinar after con corrutinas, se pueden manejar descargas, máquinas de estados, animaciones y tareas de red dentro del bucle de eventos sin bloqueo
    • En una CLI pura se necesita vwait para mantener vivo el proceso, pero en una app Tk el administrador de ventanas mantiene el bucle de eventos
    • coroutine::util de tcllib ofrece wrappers conscientes de corrutinas para socket, gets y read
  • Como las corrutinas comparten un solo hilo de CPU, si se ejecuta un cálculo largo se congela toda la UI; ese tipo de trabajo debe separarse con el paquete Thread
  • Tcl Thread usa un modelo shared-nothing, con un intérprete aislado por cada hilo
    • Los mensajes se pasan con thread::send, y TSV ofrece valores compartidos protegidos por mutex
    • Los canales transfieren su propiedad con thread::transfer, detach y attach
  • Un hilo que cae en un bucle infinito no vuelve a la cola de eventos, por lo que no se puede terminar de forma segura por la fuerza
  • Al crear 32 hilos hijos en un AMD 5950X, la memoria aumentó de 24 MB a 44 MB, usando alrededor de 0.6 MB por intérprete
  • El multihilo de Tcl es una función orientada más a la capacidad de respuesta de la UI y a la orquestación de I/O que a competir en rendimiento de cómputo
    • En una prueba de 100 millones de raíces cuadradas, C# AoT tardó 0.24 s y Tcl 16.8 s, una diferencia de unas 70 veces

Separar cálculos con C y C#

  • critcl compila código C/C++ dentro de un script Tcl en la primera ejecución y lo carga como un comando nativo
    • Durante el desarrollo se necesita gcc o clang, y al terminar se puede compilar previamente y distribuir como paquete .dll/.so
  • Las secciones críticas de rendimiento, como Mandelbrot o Fibonacci, pueden pasarse a C, pero trabajar directamente con la estructura de memoria Tcl/C es complicado
  • Una alternativa es dejar Tcl/Tk como una UI delgada y delegar los cálculos a un proceso separado: el patrón sidecar (Sidecar Pattern)
  • BFlat compila C# a binarios nativos autocontenidos y soporta Windows, Linux y Android
    • Una CLI básica de cálculo numérico puede ocupar unos 900 KB en Windows, y menos de 500 KB tras comprimirla con UPX
    • Al combinarla con un intérprete Tcl de unos 3 MB, se puede armar una app por plataforma de alrededor de 3 a 4 MB

ZipFS y distribución en un solo archivo

  • Antes de Tcl 9 se usaban Starpacks, que unían un Starkit a Tclkit, pero dependían de herramientas separadas como Metakit y SDX
  • ZipFS de Tcl 9 monta un ZIP como sistema de archivos virtual de solo lectura //zipfs:/
  • Zipkit combina tclsh/wish enlazados estáticamente con el ZIP de la app y ejecuta main.tcl al iniciar
    • Se ofrecen objetivos para Windows x86/x86_64, macOS Intel/Apple Silicon, Linux x86_64/arm64/RISC-V de 64 bits y familias Solaris
    • Con solo cambiar la plantilla de Zipkit, se pueden empaquetar binarios para otros sistemas operativos de forma cruzada
  • ZipFS nació de la implementación VFS de AndroWish, que debía leer directamente archivos dentro de un APK, y luego se integró al núcleo de Tcl
  • Si se incluyen .dll/.so específicos de plataforma, hay que detectar la plataforma de ejecución y elegir la extensión correcta

AndroWish y Decent Espresso

  • La app DE1 de Decent Espresso sigue siendo, en abril de 2026, una app Tcl/Tk ejecutada sobre AndroWish
  • La tablet no funciona como cliente de un servidor remoto, sino que usa una arquitectura local-first donde actúa como par de la máquina de café
  • AndroWish mapea los comandos de dibujo de Tk a texturas SDL2 para manejar visualizaciones de alta frecuencia incluso en tablets Android de gama baja
    • La extensión borg ofrece Bluetooth, notificaciones, vibración, voz, ubicación y eventos de estado de Android
    • A mayo de 2026 solo soporta Tcl/Tk 8.6, por lo que no se pueden usar comandos exclusivos de Tcl 9
  • AndroWish SDK crea APKs que incluyen los scripts; al eliminar extensiones innecesarias, se puede reducir un APK de unos 30 MB a entre 4 y 10 MB
  • undrowish es un intérprete de un solo archivo para probar el mismo entorno SDL en Windows/Linux, pero no incluye el borg de Android
  • Con tkconclient se puede acceder remotamente desde una PC al intérprete de Android, pero como no tiene contraseña debe usarse solo durante el desarrollo
  • Tk tiene limitaciones para adaptar automáticamente imágenes ráster según la resolución de Android y para UIs táctiles de pantalla completa, por lo que Decent Espresso implementó directamente una UI basada en skins

Wapp, DSL y sandbox

  • Wapp es un framework web Tcl centrado en un solo archivo, creado por D. Richard Hipp
    • Soporta su propio servidor de sockets, CGI y SCGI, y maneja por defecto la decodificación de URI y el saneamiento de parámetros
    • Se usa en la app de checklist que gestiona el procedimiento de lanzamiento de SQLite y en la UI web de Fossil
    • Al combinarlo con htmx y una pequeña cantidad de CSS, se pueden crear apps web centradas en procedimientos Tcl sin JavaScript
  • Si el acceso remoto o móvil es imprescindible, se recomienda Wapp; para herramientas locales, Tk, que se integra directamente con el sistema operativo
  • Tcl es adecuado para construir DSL porque incluso los bucles y condicionales son comandos
    • Con unknown, uplevel y upvar se pueden crear comandos de negocio como checkout 1000 USD
    • Exponiendo solo los comandos permitidos en un Safe Interpreter, se puede crear un entorno de scripting restringido para banca o EDA
  • También se pueden crear comandos tipo macro para generar etapas de postprocesamiento de cadenas o flujos de ejecución específicos de la aplicación

Funciones nativas del sistema operativo

  • Tcl/Tk no solo ofrece comandos comunes, sino que también llama APIs específicas de plataforma mediante extensiones
  • TWAPI en Windows ofrece APIs de bajo nivel cercanas al Windows SDK e interfaces de conveniencia
    • Con twapi::shell_execute -verb runas se puede solicitar elevación de privilegios UAC
    • Permite acceder a horas de creación/modificación de archivos, atajos globales, servicios y funciones de Windows
  • En el caso de una herramienta auxiliar para Adobe DNG Converter, después de convertir RAW recientes a DNG compatible con CS6, se restauran con TWAPI las horas de creación y modificación de los archivos originales
    • Tcl puro solo puede manejar las horas de modificación y acceso, por lo que TWAPI es necesario para restaurar la hora de creación en Windows

Restricciones y disciplina de desarrollo

  • Tcl pone más carga de corrección en la disciplina del desarrollador que en el compilador
    • Si se entiende mal la diferencia de sustitución entre {} y "", pueden aparecer dobles sustituciones y vulnerabilidades de seguridad
    • Los dict get, expr y format anidados deben dividirse en variables paso a paso para que sean legibles
    • Si se redefine el lenguaje en exceso, puede convertirse en un sistema de comandos personalizados difícil de mantener
  • Tcl distingue entre la existencia de una variable y una cadena vacía, en lugar de usar null, y se comprueba con info exists
    • Si se coloca una cadena vacía en una expresión aritmética, no se convierte automáticamente a 0 ni a NaN, sino que genera un error
  • No es adecuado para 3D/audio en tiempo real ni para grandes cálculos matriciales
    • Se pueden usar Tcl3D, Canvas3d y comandos externos de audio, pero no son su caso de uso principal
    • Si se procesa una matriz de 1 GB como cadenas/listas, el costo de gestión de objetos crece mucho, por lo que conviene usar una biblioteca C o un proceso de cálculo separado
  • Las fortalezas de Tcl son la coordinación basada en corrutinas e hilos, I/O y eventos, las capas de presentación Tk/CLI, las pruebas y la automatización

Paquetes y entorno de desarrollo

  • Tcl no tiene un gestor central de paquetes universal equivalente a npm o pip, y teacup/teapot de ActiveTcl quedaron mayormente como legado
  • Las distribuciones “batteries included” incluyen paquetes verificados
    • Magicsplat ofrece paquetes Tcl/Tk 9 seleccionados, con foco en Windows
    • BAWT es un framework de compilación maximalista para crear distribuciones con extensiones para varias plataformas y CPU
    • Según la configuración, puede agrupar los principales paquetes del ecosistema en unos 35 MB
  • No tener un gestor central no lo hace automáticamente más seguro, pero ofrece la ventaja de poder fijar todas las dependencias y analizarlas una vez
  • En Tcl, la generación dinámica de comandos dificulta el análisis estático y el autocompletado, y Nagelfar tampoco puede verificar por completo comandos desconocidos o redefiniciones en tiempo de ejecución
  • En VSCode/VSCodium se pueden usar Tcl by bitwisecook, Tcl Navigation and Tools y Code Runner

Instalación por plataforma

  • En Windows, al instalar Magicsplat Tcl/Tk para todo el sistema, se pueden configurar el PATH y las asociaciones .tclapp/.tkapp
  • En Debian, Ubuntu y derivados, se pueden instalar Tcl, Tk, SQLite, TLS, imágenes y Thread con los siguientes paquetes
    • sudo apt-get install tcl tk libsqlite3-tcl sqlite-tcl tcltls tcllib libtk-img tcl-thread
  • Varios repositorios Linux LTS ofrecen Tcl 8.6, y las compilaciones con extensiones de Tcl 9 están disponibles en tcl-builds-with-libxft
  • Hay casos en los que Tk funciona no solo en X11, sino también en entornos Wayland como Zorin OS 18
  • El Tcl 8.5 incluido por defecto en macOS es para compatibilidad heredada, por lo que se recomienda evitarlo para el desarrollo moderno con Tcl/Tk
    • Se puede instalar Tcl/Tk 9 mediante Homebrew, MacPorts o compilaciones experimentales de BAWT
    • En Apple Silicon, /opt/homebrew/opt/tcl-tk/bin debe colocarse al inicio del PATH para que tenga prioridad sobre el Tcl del sistema

Materiales de aprendizaje y evaluación final

  • The Tcl 9 Programming Language es un recurso avanzado que cubre Tcl 9 puro en profundidad; para entender todas sus funciones, se recomienda leerlo varias veces y seguir los ejemplos directamente
  • TkDocs cubre Tk moderno, grid, el bucle de eventos y técnicas antiguas que conviene evitar
  • Los materiales de Tutorialspoint no se recomiendan, ya que incluyen métodos de instalación antiguos y prácticas como usar expr sin llaves
  • Los REPL de tclsh y wish muestran el uso correcto cuando se ingresan argumentos inválidos, por lo que pueden usarse como herramientas de aprendizaje para experimentar junto con la documentación
  • Tcl/Tk no es un ecosistema de moda ni con una comunidad masiva, pero sigue siendo un conjunto de herramientas de propósito general para equipos pequeños e industrias de misión crítica que valoran la compatibilidad y consistencia a largo plazo
  • Es adecuado cuando se busca “boring technology” que funcione durante décadas en lugar de stacks que cambian rápido, y cuando se necesita una capa de CLI, GUI, automatización u orquestación más que un motor de cálculo

Aún no hay comentarios.

Aún no hay comentarios.