What does it mean for a language to be called “Tcl”? It surely cannot just mean that it is built from C via libtcl; there must be something deeper than that. Well, the Endecalogue/Dodekalogue must have something to do with it of course, but is that all? I suspect not; you can't do anything without more than that. So on this page, I'm going to try to identify what additional things have to be there to make up something that we'd recognize as Tcl. In particular, I'm going to identify “profiles” that comprise a particular language core, related semantics and minimal associated set of commands; these profiles will build on top of each other of course.
This profile approximates the language that was there in Tcl 7.*
This profile is 7 plus array variables and the array command (particularly, array get, array names, array set). If trace is supported, traces must be allowed on whole arrays or individual entries.
Everything in 7a, but also with after, open, close, gets, read, fconfigure, fileevent, eof, fblocked, bgerror, update and vwait. (i.e., the event and core IO system). Also supporting socket is recommended, but not required. Note that it is up to implementations to define the meaning of "filenames" used by open. Also recommended is clock (especially clock seconds, but clock format and clock scan are also of reasonable priority).
This profile adds the following to 7:
These are the combined children of 8 and 7a/7+ respectively. 8+ adds fcopy to the list of commands.
As 8, but with also lset, lindex with multiple indices. Support for interp is recommended (especially interp alias where source and target arguments are the empty string).
As above…
As 8.4, but with these changes:
Adds chan to list of commands over 8.5/8.4+ combination
TODO: work this out, but likely the coroutine/tailcall stuff plus TclOO