I'm a big fan of programming in Tcl, the "Tool Command Language", although it is distinctly out-of-fashion these days. When I have the freedom to choose, I tend to use Tcl for anything that doesn't need to run at maximum possible speed (and probably C++ for anything that does).
One of my colleagues at Bloomberg once asked when I would give up writing utilities in such an ancient language as Tcl and update myself to something more contemporary like Python. I should perhaps have replied "I find your lack of faith disturbing" but I just said something lame to the effect that such an "update" would make me less productive 😉.
Over my 47-year involvement with computing, at various times I have been enthusiastic about several different programming languages:
- St. Andrews Static Language - the first practical implementation of a pure functional programming language anywhere, which I just happened to get the chance to use in 1975-6.
- Modula-2 - a very clean, predictable, understandable conventional algorithmic language.
- Prolog - the classic PROgramming in LOGic language, yet another fundamentally different yet consistent paradigm.
- Perl - quite the opposite of all the above, a very "hacky" language based on practicality not purity, great for solving certain types of problems quickly, but really not scaling up nicely at all.
- Tcl - "Tool Command Language", for me this hits the "sweet spot" between all of the above.
In contrast, the essence of Tcl is a very small and simple core which defines only how to define and use variables, data values, commands in general, and events. The only syntactic rules are those which define how to invoke a generic command and pass data to and from it. These are documented at man Tcl, there is no special syntax for specific commands. All functionality is defined as the semantics of individual commands. Flow control is done by commands which take other commands as their arguments. So if-then-else functionality is provided by a command called "if" whose arguments are the condition to test, the code to execute when the condition is true, and optionally the code to execute when the condition is false.