Tcl 9.0

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.