In the Mindshifting May introductory video [link] Erik’s Tcl notes were:
Originally developed by John Ousterhout whilst working at the University of California, Berkeley. Developed in the late '80s as an extension language for Electronic(s) design automation (EDA) applications (software tools for designing electronic systems such as integrated circuits and printed circuit boards) which were his professional focus.
Originally, it was envisioned that the Tcl code would be used as “glue”, and that all important functionality would be coded in C. But the Tcl language has evolved to be fully-featured in its own right.
Tcl, pronounced “tickle” is short for Tool Command Language
It was designed with the goal of being very simple but powerful.
General purpose, can be used for scripts, embedded, used for building websites or GUIs (via the Tk framework)
Multi-paradigm: object-oriented, imperative and functional styles are supported
Used in CISCO router GUIs, various manufacturing systems, NASA has used it on many occasions, Pixar, Boeing, Intel, NBC, and many more. Tk, the windowing toolkit, has been adopted by other “scripting” languages like perl/python/ruby. Expect, a tool to automate interactive CLI applications
Why it’s great
Very little syntax, just 12 rules and it fits on a piece of paper. Semantics are also relatively straightforward. Makes programs easy to read and learn
Simple concurrency via coroutines, which allows asynchronous code to be written like synchronous code
Built-in event loop for network programming and asynchronous file I/O
Mature, but still evolving
Straightforward type system: everything is a string. “Everything is a string” was how Tcl used to be implemented. Now, under the hood, there is a robust type system, where the Tcl entity (be it a string, float, list, dictionary) has a type-specific representation as well as a string representation. This greatly improves the performance of Tcl code, as it no longer needs to convert back-and-forth from strings.
“Everything runs as commands”. There are no builtin commands. Tcl ships with a “standard library” of commands, including if and while, etc. It’s very simple tadd new control flow commands: for example an until loop. It’s also easy to override Tcl command.
Due to being compact, simple semantics and being implemented as a C-library, easy to embed
I don’t particularly consider Tcl as “mindshifting”. The syntax feels somewhere in between shell and Lisp. It’s a largely imperative language with procedures (i.e. functions). The data structures are pretty familiar: lists (arrays) and dictionaries (maps)
Karl Lehenbauer, former CTO of FlightAware, was a creator of TclX, a library of useful extensions. Many of the features have been incorprorated into the Tcl core. FlightAware offered substantial bounties for improvements to Tcl.