Tcl 9.0

Tcl 9.0 marks the first major update to the scripting language in nearly three decades, introducing 64‑bit internals, full Unicode support (including modern emoji), a zip-based virtual filesystem, and a revamped event system built on epoll/kqueue where available. Commenters highlight Tcl’s enduring strength as an embeddable, highly consistent “Lisp for C programmers” that underpins tools in EDA, networking gear, SQLite’s test suite, Expect, and Tk-based GUIs, while also noting pain points such as dated GUI aesthetics on Linux, uneven package management, and performance versus newer ecosystems. There is broad appreciation that the language and its tooling are still evolving, even as many see it as a niche choice outside domains like chip design, automation, and legacy web stacks such as AOLServer/NaviServer.

Tcl 9.0 changes and compatibility

  • First major release in decades; moves to 64‑bit internals and full Unicode, enabling very large data and modern character support.
  • Adds new notifier built on epoll/kqueue where available, replacing select for event handling and improving concurrency scalability.
  • Introduces new coroutine/NRE tooling (e.g., coroinject/coroprobe) and refines the core while removing some legacy features.
  • Backwards compatibility is “mostly high” but some scripts need adjustments.

Removal of ~ home expansion

  • ~ and ~user path expansion were removed per a Tcl Improvement Proposal.
  • Rationale: treating a leading ~ as special makes certain operations dangerously surprising (e.g., deleting /tmp/~ wiping a home directory) and complicates correct handling of legitimate filenames starting with ~.
  • Some argue it should only have been limited to ~/ or otherwise fixed; others say removing the special case entirely is safer and more consistent.

Zip filesystem and packaging

  • Built‑in “zip filesystem” lets zip/jar archives behave like mountable file systems, similar conceptually to loop‑mounted ISOs or language‑specific VFSes.
  • This underpins single‑file “standalone applications” where code and resources live inside a zip embedded in the interpreter binary, formalizing long‑used community techniques.

Where Tcl is used today

  • Very common in EDA/chip‑design and FPGA tools (Intel, Xilinx, Synopsys, Cadence, Mentor).
  • Used in mission control systems (SCOS‑2000), microcontroller debugging (OpenOCD/JimTcl), network appliances (F5/A10), Expect scripts, Eggdrop and IRC bots.
  • Tk remains attractive for lightweight cross‑platform GUIs and internal tools; Tcl is heavily used around SQLite and appears in other test suites (e.g., Redis).

Language design and ergonomics

  • Advocates emphasize: tiny, regular core (“everything is a command/string”), homoiconicity, powerful metaprogramming (uplevel, upvar, tailcall), easy C integration, rich event loop and channel I/O, safe interpreters, and several OO systems.
  • Critics call it “stringly,” hard to read for large data‑processing scripts, and slower than Python; some find upvar/stack tricks and comment/quoting rules unintuitive.
  • Ecosystem complaints include weak/dated package management, friction setting up web servers or modern crypto/JWT, and lag in third‑party support for new Tcl versions.

Tk GUI look and feel

  • Tk has a theming engine (ttk) with multiple themes and native‑looking defaults on macOS/Windows.
  • On Linux, built‑in themes are seen by some as dated; better‑looking themes exist but often require extra discovery and setup.