The Tcl Programming Language

Type system and “everything is a string”

  • Debate centers on whether Tcl’s “everything is a string” model makes large systems unmanageable.
  • Defenders argue Tcl values do have runtime types; “string” is the canonical form, with an internal typed representation cached (“shimmering”) for efficiency.
  • Comparisons with Python show both do runtime type checks; critics say Tcl’s error messages and string-centric semantics are harder to reason about.
  • Stallman’s 1990s critique (no real numbers, arrays, data structures) is called outdated: Tcl 8+ optimizes numeric storage, has associative arrays, lists, and tcllib provides rich data structures.
  • Dynamic/dynamic scoping via upvar/uplevel is seen as powerful but also as a “skeleton in the closet” compared to lexical scoping in JS and others; can enable ugly patterns in large codebases.

Real-world, non-trivial use

  • Many large systems cited to refute “can’t build anything serious”:
    • Massive EDA and IC verification toolchains, with hundreds of thousands of lines of Tcl.
    • FPGA IDEs and design flows, often integrating multiple tools.
    • AOLserver-based stacks (CNN, AOL webmail), FlightAware, MacPorts, Cisco IOS scripting, F5 iRules, Tealeaf, Fidessa, and others.
    • GUIs: Tcl/Tk for git-gui, gitk, Pure Data, Wavesurfer, many older engineering tools.
    • SQLite’s origins as a Tcl extension and its large Tcl test suite.
  • Several anecdotes describe decade-long, evolving Tcl systems that remained maintainable with good discipline.

GUI programming and ergonomics

  • Tk is repeatedly praised as still one of the easiest ways (along with Python/Tk) to build basic cross-platform GUIs, even in 2025.
  • Some lament that modern GUI stacks haven’t surpassed Tcl/Tk, HyperCard, or VB6 for rapid UI work; others explore Lazarus/FreePascal as an alternative.

History, web “what ifs”, and JavaScript

  • A counterfactual is discussed where Tcl might have become the browser language if Ousterhout had joined Netscape. Opinions differ on whether Tcl would have fit DOM/graph manipulation well.
  • JavaScript is defended as not that bad, with much of the hate attributed to lack of choice on the web. Others point to JS quirks and “WAT” examples as evidence of poor semantics.

Current status, tooling, and learning

  • Tcl is still actively developed (e.g., 9.0 releases), used via tclsh, Expect, jimtcl, and embedders like Python’s tkinter.
  • Some confusion over official binaries vs. source; OS package managers and third-party builds fill the gap.
  • The book linked is praised; several readers prefer Python’s ecosystem but keep Tcl for small tools, DSLs, or Tcl+in-memory-SQLite combinations.