DKF: What is the very minimum set of Tcl commands? Here's an attempt to define them:
Things to go in the second orbit:
Note that there are no list commands; they are reimplementable in terms of string manipulation (though that'll be slow, of course). I've omitted REs too (big, but not fundamental) and dicts (nice to have, but again not required). Also, the fully-featured subst is hard to do in any other way, but it's not used that much and can be omitted while still allowing most scripts to run just fine.
CL: Donal launched this page while philosophizing for the benefit of the Parroteers. I find namespace dispensable, and agrees that REs and dicts are as well. Donal commented, "Note that I'd put encodings and the fuller channel/event model further out. They're vital, but not the heart of the story." I think they are fundamental, in a specific sense, but I'll let them pass for now.
DKF: The channel and event layer (including the encoding command) is actually fairly separable from the rest of Tcl. If someone's going to reimplement Tcl, I'd suggest they start elsewhere.
Lars H: I think it needs to be pointed out that what is being minimized here is the number of core commands. This measure will tend to favorize huge ensembles like string and little languages like expr over alternative primitives that might be more natural or easier to implement, so I'm a bit skeptical about the above list being an optimal "minimal Tcl". Besides, what about format and scan? Languages that can't do string<->numeric conversions (both as value and as character code) tend to be too limited for many purposes.
DKF: I was actually thinking in terms of things that it would be really hard to implement any other way, so string gives you the basic things you need for pulling strings apart (it is string compare, string index and string range that are critical) and working out what is in them, which in turn allows you to build the list and dict operations. Getting up to the level of handling format and scan requires a bit more (you need expressions and loops so you can build the code to parse the format strings) but neither is fundamental.
Also, with expr it would be reasonable to leave out (at least initially) the floating point handling (including all functions). While yes, you do want it, it is far more optional than the integer math parts which are vital for building other commands.