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, [dkf%|%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 ā€œ''profile''sā€ 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. **Profile: 7** This profile approximates the language that was there in Tcl 7.* Rule set: [Endecalogue] Semantics: All values ''are'' strings of characters drawn from an unspecified (but assumed 8-bit extension to [ASCII]) character set. There is an undifferentiated space of (global) commands, indexed by name, and a second undifferentiated space of global variables. Commands: [set], [expr], [source], [if], [while], [for], [foreach], [append], [lappend], [lindex] with a single index, [llength], [list], [eval], [proc], [global], [upvar], [uplevel], [return] (but not `-options`), [break], [continue], [error], [info] (but only [info exists] of the subcommands is necessary), [string] (minimal list of subcommands: [string compare], [string first], [string last], [string range], [string match]), [puts], [rename] Recommended extensions: [incr], [concat], [linsert], [lrange], [lreplace], [lsearch] (no options mandatory), [lsort] (no options mandatory), [regexp] and [regsub] (RE language not specified), [format], [scan], [split], [join], [trace] (only needed on global variables), [switch] (only required option is `--`; exact matching must be supported by default) **Profile: 7a** 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. **Profile: 7+** Everything in ''7a'', but also with [after], [open], [close], [gets], [read], [fconfigure], [fileevent], [eof], [fblocked], [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). **Profile: 8** This profile adds the following to ''7'': Semantics: All values ''are'' [Tcl_Obj] (or equivalent); conceptually read-only, but implementations may optimize. Characters are drawn from [UNICODE] character set (''TODO: Specify which version''). Commands and variables exist in a hierarchical collection of namespaces; `::` is the separator and the name of the root namespace. Commands: [namespace], [variable], [package], [encoding] (only [encoding convertto] and [encoding convertfrom] are mandatory), [binary] (only [binary format] and [binary scan]) **Profiles: 8a, 8+** These are the combined children of ''8'' and ''7a''/''7+'' respectively. ''8+'' adds [fcopy] to the list of commands. **Profile: 8.4** 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). <>Concept