1 pontos por GN⁺ 6 시간 전 | Ainda não há comentários. | Compartilhar no WhatsApp
  • Tcl/Tk permite criar CLI e GUI de aparência nativa juntos em Windows, Linux e macOS, e é um conjunto de ferramentas sob licença BSD com suporte a eventos e I/O não bloqueantes e threading isolado
  • Tcl é uma linguagem centrada em comandos que interpreta a primeira palavra como comando e trata código e dados como strings, enquanto Tk abstrai a UI de cada sistema operacional por meio de widgets e eventos
  • Lançado em 13 de novembro de 2025, o Tcl/Tk 9.0 adicionou 64 bits, Unicode completo, codificação estrita, empacotamento em arquivo único com ZipFS, SVG, DPI de alta resolução e Dark Mode, mas traz mudanças de compatibilidade para parte do código legado
  • Foi usado por muito tempo em git gui, ferramentas de FPGA e EDA, Cisco IOS, ambientes operacionais da ESA, build e testes do SQLite e apps como Decent Espresso, e há casos de scripts dos anos 1990 que ainda rodam em versões atuais
  • Em vez de grandes cálculos numéricos, ele é mais adequado como linguagem de cola para UI orientada a eventos, automação, I/O, DSLs e coordenação de processos nativos, enquanto os cálculos podem ser delegados a componentes externos como C, C# e Python

Por que escolher Tcl/Tk

  • O Tcl/Tk permite montar um ambiente de cerca de menos de 100 MB, mesmo incluindo pacotes comuns, e criar apps pequenos de arquivo único para cada plataforma suportada, além de apps web
  • A licença BSD permite modificar, redistribuir e vender no todo ou em parte, e a comunidade Tcl mantém o core e os lançamentos
  • Outras opções de GUI avaliadas tinham as seguintes limitações
    • AutoHotkey v2 é adequado para pequenas ferramentas no Windows, mas é exclusivo do Windows e não garante chamadas nativas no Wine
    • C# WinForms depende da API do Windows, e MAUI e Avalonia têm dependências pesadas, tornando o desenvolvimento pequeno e não corporativo trabalhoso
    • Apps web locais no estilo Electron exigem gerenciar comunicação entre frontend e backend, conflitos de porta e segurança, e até um navegador vazio pode consumir mais de 100 MB
    • Janelas simples feitas com Fyne e Gio, do Go, tinham cerca de 40 mil dependências indiretas e binários estáticos com mais de 30 MB, e não pareciam apps nativos
    • Qt tem uma configuração complexa de MOC, signal e slot na fronteira nativa, além de licenciamento GPL/LGPL e comercial
  • Muitos frameworks modernos de GUI desenham diretamente em canvas em vez de usar as APIs de UI do sistema operacional, e empacotam todo o ambiente de execução por OS e CPU, dificultando obter aparência nativa

Tcl projetada como linguagem de cola

  • Lançada por John Ousterhout em 1990, Tcl foi projetada como uma cola arquitetural para conectar código de baixo nível e alto desempenho a uma camada lógica legível por humanos
    • Bridge: conecta código como C++ e Rust a UIs de alto nível
    • Orchestrate: controla o fluxo de dados entre programas e módulos
    • Wrap: expõe operações internas complexas como comandos simples de script
  • Tk é um toolkit GUI multiplataforma que complementa a interação por linha de comando do Tcl e pode ser carregado com package require Tk
  • O pequeno core em C do Tcl oferece suporte a Windows, Linux, macOS e ARM, x86 e RISC-V
    • No Android, a CLI pode usar Termux, e a GUI pode usar AndroWish
  • Ousterhout recebeu o ACM Software System Award em 1997 por sua contribuição duradoura ao desenvolvimento de sistemas de software

Casos industriais de uso prolongado

  • Tcl é usado há cerca de 40 anos em ambientes onde confiabilidade, compatibilidade retroativa e portabilidade são importantes
    • git gui e gitk, incluídos no Git
    • Linguagem de automação em ferramentas de FPGA e projeto de chips da Xilinx, Altera e Cadence
    • Cisco IOS Embedded Event Manager
    • GUIs internas para fazendas de simulação e testadores de hardware da Intel, NVIDIA e AMD
    • Calibre e Virtuoso, da Siemens EDA
    • Ambientes operacionais ESTEC e ESOC, da ESA
  • A mesma ferramenta em Tcl/Tk pode rodar, sem recompilação, de terminais de usinas nucleares até Raspberry Pi
  • O SQLite foi criado inicialmente como uma extensão Tcl, e metade dos testes é escrita em Tcl
    • Tcl também atua como um “montador” que pós-processa mais de 125 arquivos de entrada em C para gerar o código-fonte final do SQLite com mais de 200 mil linhas

Configuração de instalação e modo de execução

  • Uma instalação comum inclui os seguintes componentes
    • tclsh: interpretador de CLI
    • wish: shell de GUI com Tk e loop de eventos
    • Tcllib e Tklib: bibliotecas como http, csv, json, aes, tooltip e dateentry
    • Pacotes de extensão como Thread, TLS e arrastar e soltar
  • Ao executar sem argumentos, abre-se um REPL, permitindo digitar comandos, colar scripts e executar arquivos com source
  • Ao passar um arquivo como tclsh myscript.tcl ou wish app.tkapp, ele roda em modo batch não interativo
  • No Windows, wish é um aplicativo GUI, então usa o Tk Console em vez de um console real, e se a thread da UI bloquear, a saída também pode parecer travada
  • Para aprendizado, recomenda-se o tclsh, que fornece entrada e saída padrão em todas as plataformas e também pode carregar Tk

Sintaxe centrada em comandos do Tcl

  • O código-fonte em Tcl é composto por palavras separadas por espaços, e a primeira palavra é sempre um comando, enquanto as demais são argumentos
  • Os principais elementos da sintaxe são os seguintes
    • set: define ou consulta uma variável
    • $name: substitui o valor da variável
    • proc: define um procedimento que funciona como novo comando
    • [...]: executa o script interno e substitui pelo resultado
    • {...}: agrupa como um único argumento sem substituição
    • "...": agrupa como um único argumento, mas realiza substituições de $, [] e \
    • {*}: expande uma lista em vários argumentos
    • ::: especifica um caminho global ou de namespace
    • Quebra de linha e ;: separam comandos
  • Em string range "Tcl Programming" 0 2, string é um ensemble que despacha para o subcomando range e retorna Tcl
  • if, while e return também são comandos comuns, não palavras-chave reservadas
    • while avalia repetidamente as strings da condição e do corpo
    • Com uplevel, é possível criar estruturas de controle definidas pelo usuário, como repeat ... until|while ...
    • return transmite os códigos de conclusão TCL_OK, TCL_ERROR, TCL_RETURN, TCL_BREAK e TCL_CONTINUE

Homoiconicidade e substituição segura

  • Em Tcl, tanto código quanto dados são strings compostas por palavras, então o mesmo valor pode ser interpretado como lista, dado ou comando executável
  • Ao expandir uma lista como em {*}$userinput, o primeiro elemento vira comando e os demais viram argumentos, então, se argumentos com espaços não forem agrupados corretamente, podem surgir problemas como erro de nome de canal
  • Essa homoiconicidade facilita DSLs e a extensão de estruturas de controle, mas também cria um ônus de integridade e segurança, já que dados podem virar código executável
  • Callbacks devem ser montados com [list command $arg] para preservar os limites de argumentos que contêm espaços e caracteres especiais
  • Expressões em expr e if devem sempre ser envolvidas em {...} para evitar substituição dupla e injeção de comandos, além de permitir otimização por bytecode
  • O Safe Interpreter bloqueia por padrão acesso ao sistema de arquivos, sockets e bibliotecas externas, e expõe apenas as funcionalidades permitidas por interp alias

Mudanças no Tcl/Tk 9.0

  • A Tcl/Tk Core Development Team lançou o 9.0 em 13 de novembro de 2025, 12 anos após o Tcl 8.6
  • As principais mudanças são as seguintes
    • transição completa para 64 bits e suporte a todos os code points Unicode
    • ZipFS, que monta ZIP como sistema de arquivos virtual
    • suporte do Tk a SVG, DPI de alta resolução, notificações do sistema e Dark Mode no Windows e macOS
    • perfil strict padrão, que gera erro imediatamente em caso de incompatibilidade de codificação
  • Também há mudanças de compatibilidade
    • scripts que incluem código C com critcl podem quebrar por causa da mudança no tamanho de ponteiros
    • 010 no Tcl 8.x é o octal 8, mas no Tcl 9 é o decimal 10, e octais usam o prefixo 0o
    • o UTF-8 BOM U+FEFF não é removido automaticamente, então é preciso cortá-lo explicitamente quando necessário
  • O Tcl 8.6 também pode ser usado no desenvolvimento comum de CLI e GUI, mas para novos projetos o 9.0 é recomendado por trazer melhorias de segurança e de UI
  • Como implementações pequenas, há o Jim TCL, com cerca de 100~200kB, e o Picol, com menos de 1.000 linhas de código C

Widgets do Tk e aparência moderna

  • O Tk não expõe diretamente Win32, X11 e Cocoa, mas os abstrai por meio de comandos de widget e binding de eventos
  • O Tk inicial deixou uma impressão ultrapassada por causa dos widgets clássicos cinzas e quadrados, mas o ttk oferece widgets mais próximos dos temas do sistema operacional
    • os temas incluídos por padrão são alt, default, clam e classic
    • apps antigos podem trocar widgets clássicos por ttk::treeview, ttk::notebook, ttk::progressbar etc.
  • O applet de calculadora de hipoteca de 1996 rodou também no Tcl 9.0.3, e a versão modernizada adiciona grid, validação de entrada, entrada inicial, suporte a DPI e canvas responsivo
    • o original tem 188 linhas, excluindo comentários e linhas em branco, e a versão modernizada tem cerca de 250 linhas incluindo os novos recursos
    • o mesmo script roda no Windows 10, Linux Mint, tablets e celulares Android e SBCs ARM
  • O Tcl/Tk 9.0 escala quase proporcionalmente em 96 DPI e 144 DPI no Windows, e deve-se usar unidades relativas e padding em vez de pixels fixos
  • Recomenda-se aprender hierarquia de widgets, caminhos baseados em ponto, layout e eventos pelo tutorial do TkDocs

Loop de eventos e baixo acoplamento

  • O loop de eventos do Tcl processa mouse e teclado, arquivos e canais e callbacks em ordem de fila em uma única thread, e começa em segundo plano quando o Tk é carregado
  • treeview e scrollbar são widgets irmãos que não contêm um ao outro e atualizam suas posições nos dois sentidos trocando prefixes de comando
  • O Tk pode entregar a widgets eventos virtuais como <<UI:Request:Submit>> com payload dict
  • Um EventManager reutilizável pode gerenciar, em um dicionário, listas de assinantes por evento e chamar event generate apenas para widgets existentes
    • cumpre papel parecido com C# Events/Delegates, CustomEvent do JavaScript e PyPubSub·blinker do Python
    • pode enviar resultados de validação a vários assinantes, como popup, inspector e botão Send, sem referências diretas
  • Mesmo em Tcl puro, é possível criar um gerenciador de eventos que chama callbacks de assinantes, útil para animação de console baseada em tick de 50ms ou rolagem sincronizada de vários canvas
  • Um design de eventos centrado em dados é adequado para sistemas em estilo MVC, com separação entre UI e lógica, e corresponde às etapas de seleção de eventos, coleta de informações, decisão de estratégia, execução e avaliação do PIOSEE

Conexão com Python e processos externos

  • O tkinter do Python é um wrapper do Tk, mas exemplos antigos e o tema padrão podem passar a impressão de que o próprio Tk está ultrapassado
    • para uma aparência moderna, é preciso usar explicitamente from tkinter import ttk e ttk.Label, ttk.Button etc.
  • Recomenda-se usar o Tk no Tcl, para o qual ele foi originalmente projetado, e separar o Python como camada de processamento de dados
  • Para tarefas pontuais em Python, usa-se exec; para tarefas assíncronas persistentes, conecta-se por pipe com open "|python3 -u script.py" r+
    • com modo não bloqueante, buffer por linha e fileevent, é possível executar tarefas com NumPy e Pandas mantendo a responsividade da GUI
  • Da mesma forma, ao conectar processos filhos nativos como C#, mesmo que o processo de cálculo trave ou consuma toda a CPU, o processo de UI permanece separado
  • O EOF do pipe também é um evento readable, então é preciso verificar [eof $pipe] na função de tratamento para evitar callbacks infinitos

Representação de valores, estruturas de dados e desempenho

  • “Everything is a String” significa que todo valor tem uma representação padrão em string, não que ele seja sempre armazenado como string
  • Tcl_Obj é um objeto de porta dupla que gerencia ao mesmo tempo uma representação em string UTF-8 e representações internas como integer, list, dict e byte array
  • O trabalho de recriar a representação interna quando o tipo necessário muda é chamado de shimmering
    • em list, deve-se continuar usando lappend e lindex; em dict, dict; e em binários, o comando binary, para reduzir custo de conversão e corrupção de dados
    • tcl::unsupported::representation permite diagnosticar o ponteiro do objeto e sua representação interna
  • O Tcl usa Copy-on-Write, então ao atribuir valores ele não copia imediatamente, mas duplica o objeto compartilhado quando ele é realmente modificado
  • Para binários como PNG, é preciso definir -translation binary no canal e usar binary encode/decode para evitar conversão de CR/LF e UTF-8
  • dict set cria automaticamente caminhos intermediários, e dict with e dict update permitem modificar valores aninhados como se fossem variáveis locais
    • chaves duplicadas são consolidadas pelo método Last Writer Wins, em que o último valor prevalece
  • Listas são adequadas para dados ordenados e estruturas em forma de matriz; dicionários, para dados gerais aninhados de chave-valor

Arrays, namespaces e TclOO

  • Namespaces são contêineres dinâmicos que guardam variáveis e comandos, e namespace ensemble pode criar um dispatcher como Logger log
  • Variáveis e comandos usam tabelas hash separadas, então o mesmo nome pode existir ao mesmo tempo, e info vars, info commands e info procs permitem inspecionar a estrutura em tempo de execução
  • Tcl Array é uma tabela hash plana que aponta para variáveis individuais
    • é adequado para coleções com chaves dinâmicas, como estado de UI, e permite fazer binding ou trace de elementos individuais a widgets
    • em procedimentos, é preciso passar o nome do array e conectar um alias ao original com upvar
  • Recomenda-se usar namespaces para estado global/singleton com chaves fixas e arrays para coleções com chaves dinâmicas
  • Incluído no core desde o Tcl 8.6, o TclOO fornece classes, objetos, herança e construtores/destrutores com base em namespaces e despacho de comandos
    • objetos são comandos reais, como ::oo::Obj42, e armazenam estado em um namespace dedicado
    • oo::define permite alterar classes, e oo::objdefine, objetos específicos, em tempo de execução
    • mymethod cria um callback completo de método de objeto para passar a after etc.
  • O TclOO não tem garbage collection, então é preciso remover objetos explicitamente com $obj destroy
    • o ciclo de vida pode ser gerenciado com try/finally ou managed_create baseado em trace de variável
    • channels também exigem close, e managed_channel pode limpá-los automaticamente ao fim do escopo
  • Widgets do Tk também permanecem como comandos, mas se um widget pai for destroy, todos os filhos são removidos junto

Corrotinas e threads

  • As corrotinas de Tcl são corrotinas stackful que mantêm toda a pilha de chamadas e, após yield, retomam preservando variáveis locais e o ponto de execução
  • Ao combinar after e corrotinas, é possível tratar downloads, máquinas de estado, animações e trabalho de rede sem bloqueio dentro do loop de eventos
    • Em CLI pura, vwait é necessário para manter o processo ativo, mas em apps Tk o gerenciador de janelas mantém o loop de eventos
    • O coroutine::util do tcllib fornece wrappers compatíveis com corrotinas para socket, gets e read
  • Como as corrotinas compartilham uma única thread de CPU, se um cálculo longo for executado toda a UI trava; esse tipo de trabalho deve ser separado com o pacote Thread
  • O Tcl Thread usa um modelo shared-nothing em que cada thread tem um interpretador isolado
    • thread::send transmite mensagens, e TSV fornece valores compartilhados protegidos por mutex
    • Canais transferem propriedade com thread::transfer, detach e attach
  • Uma thread presa em loop infinito não volta para a fila de eventos, então não pode ser encerrada à força com segurança
  • Em um AMD 5950X, ao criar 32 threads filhas, a memória aumentou de 24MB para 44MB, usando cerca de 0,6MB por interpretador
  • O threading em Tcl é um recurso para responsividade de UI e orquestração de I/O, não para competir em desempenho de cálculo
    • No teste de 100 milhões de raízes quadradas, AoT C# levou 0,24 segundo e Tcl 16,8 segundos, uma diferença de cerca de 70 vezes

Separando cálculos com C·C#

  • O critcl compila código C·C++ dentro de scripts Tcl na primeira execução e o chama como comando nativo
    • Durante o desenvolvimento, gcc ou clang são necessários, e depois de pronto é possível distribuir o pacote pré-compilado como .dll·.so
  • Trechos críticos de desempenho, como Mandelbrot ou Fibonacci, podem ser movidos para C, mas lidar diretamente com a estrutura de memória Tcl/C é complicado
  • Uma alternativa é deixar Tcl/Tk como uma UI fina e delegar o cálculo a um processo separado no padrão sidecar (Sidecar Pattern)
  • BFlat compila C# em binários nativos autônomos e oferece suporte a Windows·Linux·Android
    • Uma CLI básica de cálculo numérico fica em torno de 900KB no Windows e pode cair para menos de 500KB após compressão com UPX
    • Combinando com o interpretador Tcl de cerca de 3MB, é possível montar apps por plataforma com cerca de 3~4MB

ZipFS e distribuição em arquivo único

  • Antes do Tcl 9, usava-se Starpack, que anexava um Starkit ao Tclkit, mas isso dependia de ferramentas separadas como Metakit e SDX
  • O ZipFS do Tcl 9 monta ZIPs como sistema de arquivos virtual somente leitura em //zipfs:/
  • O Zipkit combina tclsh·wish ligados estaticamente com o ZIP do app e executa main.tcl na inicialização
    • Há alvos para Windows x86/x86_64, macOS Intel·Apple Silicon, Linux x86_64/arm64/RISC-V 64-bit e famílias Solaris
    • Basta trocar o Zipkit de modelo para fazer cross-packaging de binários para outros SOs
  • O ZipFS surgiu da implementação de VFS do AndroWish, que precisava ler diretamente arquivos dentro do APK, e depois foi incorporado ao core do Tcl
  • Se incluir .dll·.so específicos de plataforma, será preciso detectar a plataforma de execução e escolher a extensão correta

AndroWish e Decent Espresso

  • O app DE1 da Decent Espresso continua sendo um app Tcl/Tk executado em AndroWish mesmo em abril de 2026
  • O tablet usa uma arquitetura local-first em que atua como par da máquina de café, e não como cliente de um servidor remoto
  • O AndroWish mapeia comandos de desenho do Tk para texturas SDL2, permitindo visualizações de alta frequência mesmo em tablets Android de baixo custo
    • A extensão borg fornece Bluetooth, notificações, vibração, voz, localização e eventos de estado do Android
    • Em maio de 2026, ele ainda suporta apenas Tcl/Tk 8.6, então comandos exclusivos do Tcl 9 não podem ser usados
  • O SDK do AndroWish cria APKs com scripts incluídos, e ao remover extensões desnecessárias é possível reduzir de cerca de 30MB para 4~10MB
  • undrowish é um interpretador de arquivo único para testar o mesmo ambiente SDL em Windows·Linux, mas não inclui o borg do Android
  • Com tkconclient, é possível acessar remotamente o interpretador Android a partir do PC, mas como não há senha isso só deve ser usado durante o desenvolvimento
  • O Tk tem limitações para adaptação automática de imagens raster por resolução do Android e para UIs touch em tela cheia, então a Decent Espresso implementou sua própria UI no estilo skin

Wapp, DSL e sandbox

  • Wapp é um framework web Tcl centrado em arquivo único criado por D. Richard Hipp
    • Ele oferece servidor de socket próprio, suporte a CGI·SCGI e já trata por padrão a decodificação de URI e a higienização de parâmetros
    • É usado no app de checklist que gerencia o processo de release do SQLite e na web UI do Fossil
    • Ao combinar com htmx e um pouco de CSS, é possível criar apps web centrados em procedures Tcl sem JavaScript
  • Se acesso remoto·móvel for essencial, recomenda-se Wapp; para ferramentas locais, recomenda-se Tk, que se integra diretamente ao sistema operacional
  • Em Tcl, até laços e condicionais são comandos, o que o torna adequado para construir DSLs
    • Com unknown, uplevel e upvar, é possível criar comandos de negócio como checkout 1000 USD
    • Expondo apenas comandos permitidos em Safe Interpreter, dá para montar ambientes de script restritos para bancos·EDA
  • Também é possível criar comandos no estilo macro para gerar etapas de pós-processamento de strings ou fluxos de execução específicos da aplicação

Recursos nativos do sistema operacional

  • Tcl/Tk chama não só comandos comuns, mas também APIs específicas de plataforma por meio de extensões
  • O TWAPI do Windows fornece APIs de baixo nível próximas ao Windows SDK e interfaces de conveniência
    • Com twapi::shell_execute -verb runas, é possível solicitar elevação de privilégio via UAC
    • Ele permite acessar horários de criação·modificação de arquivos, atalhos globais, serviços e funções do Windows
  • Em um caso de ferramenta auxiliar para Adobe DNG Converter, após converter RAWs recentes em DNG compatível com CS6, os horários de criação·modificação do arquivo original foram restaurados com TWAPI
    • Tcl puro só consegue lidar com horários de modificação·acesso, então para restaurar o horário de criação no Windows é necessário TWAPI

Limitações e disciplina de desenvolvimento

  • Em Tcl, a correção depende mais da disciplina do desenvolvedor do que de um compilador
    • Se a diferença de substituição entre {} e "" for mal compreendida, podem surgir substituição dupla e vulnerabilidades de segurança
    • dict get, expr e format aninhados ficam mais legíveis quando separados em variáveis por etapa
    • Redefinir demais a linguagem pode levar a um sistema de comandos personalizados difícil de manter
  • Em vez de null, Tcl distingue entre existência de variável e string vazia, verificando com info exists
    • Se uma string vazia for colocada em uma expressão aritmética, ela não é convertida automaticamente em 0 ou NaN; ocorre um erro
  • Não é adequado para 3D em tempo real·áudio e cálculo de grandes matrizes
    • É possível usar Tcl3D·Canvas3d e comandos externos de áudio, mas esse não é seu uso principal
    • Se uma matriz de 1GB for tratada como string·lista, o custo de gerenciamento de objetos cresce demais, então uma biblioteca C ou um processo de cálculo separado é mais adequado
  • Os pontos fortes de Tcl são coordenação baseada em corrotinas·threads, I/O e eventos, camadas de apresentação Tk·CLI, testes e automação

Pacotes e ambiente de desenvolvimento

  • O Tcl não tem um gerenciador central de pacotes universal equivalente a npm ou pip, e o teacup e o teapot do ActiveTcl se tornaram em grande parte legados
  • Distribuições Batteries Included fornecem junto pacotes validados
    • Magicsplat oferece um conjunto selecionado de pacotes Tcl/Tk 9 com foco em Windows
    • BAWT é um framework de build maximalista para criar distribuições com extensões para várias plataformas e CPUs
    • Dependendo da configuração, é possível reunir os principais pacotes do ecossistema em cerca de 35 MB
  • A ausência de um gerenciador central não o torna automaticamente mais seguro, mas traz a vantagem de permitir fixar todas as dependências e analisá-las de uma vez
  • Por causa da geração dinâmica de comandos, o Tcl dificulta análise estática e autocompletar, e o Nagelfar também não consegue validar completamente comandos desconhecidos ou redefinições em tempo de execução
  • No VSCode e no VSCodium, é possível usar Tcl by bitwisecook, Tcl Navigation and Tools, Code Runner

Instalação por plataforma

  • No Windows, ao instalar o Magicsplat Tcl/Tk para todo o sistema, é possível configurar o PATH e as associações de .tclapp e .tkapp
  • Em sistemas da família Debian e Ubuntu, é possível instalar Tcl, Tk, SQLite, TLS, imagens e Thread com os seguintes pacotes
    • sudo apt-get install tcl tk libsqlite3-tcl sqlite-tcl tcltls tcllib libtk-img tcl-thread
  • Vários repositórios LTS de Linux oferecem Tcl 8.6, e builds com extensões para Tcl 9 estão disponíveis em tcl-builds-with-libxft
  • Há casos de funcionamento do Tk não só em X11, mas também em ambientes Wayland como o Zorin OS 18
  • O Tcl 8.5 padrão do macOS existe para compatibilidade legada, então é recomendável evitá-lo no desenvolvimento moderno com Tcl/Tk
    • É possível instalar Tcl/Tk 9 com Homebrew, MacPorts ou builds experimentais do BAWT
    • Em Apple Silicon, /opt/homebrew/opt/tcl-tk/bin deve ficar no início do PATH para ter prioridade sobre o Tcl do sistema

Materiais de aprendizado e avaliação final

  • The Tcl 9 Programming Language é um material avançado que aborda Tcl 9 puro em profundidade, e para entender todos os recursos recomenda-se reler várias vezes e acompanhar os exemplos manualmente
  • TkDocs cobre Tk moderno, grid, o loop de eventos e técnicas antigas que devem ser evitadas
  • O material do Tutorialspoint não é recomendado por incluir métodos de instalação antigos e práticas como expr sem chaves
  • Os REPLs de tclsh e wish mostram o modo de uso quando argumentos incorretos são inseridos, então podem ser usados com a documentação como ferramenta de aprendizado por experimentação
  • O Tcl/Tk não é um ecossistema da moda nem com uma comunidade de grande escala, mas continua sendo um conjunto de ferramentas de uso geral que valoriza compatibilidade de longo prazo e consistência em equipes pequenas e indústrias de missão crítica
  • É adequado quando se quer uma “boring technology” que funcione por décadas em vez de uma stack que muda rapidamente, e quando se precisa da camada de CLI, GUI, automação e orquestração mais do que de um motor de cálculo

Ainda não há comentários.

Ainda não há comentários.