I would be interested to know if anyone ever built anything non-trivial that didn't turn into a complete mess due to TCL's general type-flimsyness and "everything is a string" philosophy.
I would be interested to know if anyone ever built anything non-trivial that didn't turn into a complete mess due to TCL's general type-flimsyness and "everything is a string" philosophy.
[0] https://www.cisco.com/c/en/us/td/docs/ios-xml/ios/ios_tcl/co...
[1] https://community.f5.com/kb/technicalarticles/irules-concept...
[2] https://www.acoustic.com/tealeaf
[3] https://help.goacoustic.com/hc/en-us/articles/360043279654-C...
[4] https://www.cmegroup.com/solutions/market-tech-and-data-serv...
[5] http://www.services.fidessa.com/brochures/_training/VF043.pd...
https://en.wikipedia.org/wiki/Category:Free_software_program...
Aside from that there was Tk which was used to create many UIs in an era where scripted UIs were otherwise painful to create and maintain. A prominent example here is 'xconfig' from the linux kernel.
Like any good environment a little bit of practice with it can see you overcome it's apparent shortcomings and see you producing reliable and useful software in far less time that you might have in a more traditional way.
Programming is about trade offs. It's not a checklist of "good ideas."
(There are alternative implementations of Pd, such as PurrData or PlugData, that use different UI frameworks.)
Infuriatingly, Tcl/Tk (and other things which use Tk) is still light years easier for doing basic GUI programming than anything that exists in 2025.
How the hell can decades have elapsed and Tcl/Tk, Hypercard and VB6 are still vastly better for GUI development than anything we currently have?
I am not sure which makes producing cross platform binaries easier. I ran into a few issues the last time I tried TclKit I ran into problems so Starkits may not be an easy solution anymore.
> I would be interested to know if anyone ever built anything non-trivial that didn't turn into a complete mess due to TCL's general type-flimsyness and "everything is a string" philosophy.
Both MacPorts CLI client[0] and ports tree[0] have used it successfully for many years.
Regarding:
"everything is a string" philosophy
That can be said for the vast majority of Unix-like OS user-space programs.Absolutely huge codebases, there's git blames that go back to the 80s.
Which became a business unit from Altitude Software, eventually due to our MSFT partnership level we got access to .NET builds before it was known to the world, as one of the key Portuguese partners, and started to replicate our stack in .NET, based on the learnings from our Tcl based product.
The founders and core devs, from the original startup, eventually left to create their no code/low code platform, based on the learnings from both technology stacks, what they managed to achieve, and what was not done quite right, out of that OutSystems was born, one of the most successful Portuguese IT companies from the last 20 years.
I think using Tcl for that startup on a tiny Lisbon basement back in the late 1990's, turned out quite alright.
— Bob HarperNevertheless, a runtime type tag is an optimization. That doesn’t make Bob’s statement any less true.
Because Python is “strong typed” vs “weak typed” for Tcl?
$ tclsh8.6
% expr 1 + 2
3
% expr 3 + “hey there”
invalid bareword “hey”
in expression “1 + hey there”;
should be “$hey” or “{hey}” or “hey(…)” or …
vs. $ python3.11
>>> 1 + 2
3
>>> 1 + “hey there”
Traceback (most recent call last):
File “<stdin>”, line 1, in <module>
TypeError: unsupported operand type(s) for +: ‘int’ and ‘str’
I don’t really see a difference. Both checked types at runtime. Clearly Tcl can check types at runtime, even though it represents everything as a string. Whether all commands do so is another story. But, not all functions in Python check types before trying to do things that don’t make sense, either. So…So are Tcl values.
Of course it's possible to create "write-only" code in tcl. But tcl is hardly unique in that respect. Good code design and coding practices help to avoid most issues just as in many other languages.
"Everything is a string" (EIAS) is not what leads to a complete mess; it's failing to go beyond an initial, superficial understanding of the syntax and language capability and general lack of discipline that lead to un-fixable messes.