Richard Suchenwirth 2002-12-18 - Late on March 3, 1990, Peter da Silva produced two shell archives (shar) that contained the full documentation for Tcl 2.1, and posted them to alt.sources. Thanks to the history awareness of SourceForge.net [L1 ] (and the friendly folks that uploaded the data), we can still today download Tcl 2.1 and, like in a time capsule, see how Tcl was when it was really young ;-)
The documentation of those times consisted of 18 man pages, 16 for the C functions, one for Tcl_Interp, and a single Tcl.1 for the language description (plus another, stream.5). It was a joy to read, more than 12 years after, and showed how mature Tcl was already at that time. Here are my notes on the differences I found.
"Tcl will eventually provide a mechanism for communicating between applications". It took Tk and send to fulfil that promise, but we still don't have a robust cross-platform solution...
Bracketed commands didn't need to be in one line: "newlines within brackets are treated as argument separators, not command separators". This has changed later, and we all know the backslashes to extend bracketed commands over more than one line. The current view is that the contents of brackets are a script, and hence the same rules apply.
"Double-quotes act the same as braces except that they cannot be nested". This means that no substitutions took place in double-quoted strings - later allowing them was a good decision, I think.
"A Tcl expression has C-like syntax and evaluates to an integer result". No doubles, no string comparisons - but most of the operators were there already. I only miss ? : which makes concise decisions possible.
Tcl 2.1 built-in commands (left uncommented if like today's; an arrow -> marks what became of it later):
Quite a mature language, it was! Here's what was added since then to the 8.4 command set: after append array binary cd clock close encoding exit fblocked fconfigure fcopy fileevent flush gets incr interp join lappend load lreplace lsearch lset lsort namespace open package pid puts pwd read regexp regsub seek socket split subst tell trace unset upvar variable vwait while - Some of these I'd sorely miss... An embedded language was apparently not allowed to exit its app; while was not a built-in, but the manpage says it can be added by using uplevel.
The list of built-in variables was also very short, namely one: errorInfo. Finally, the short list of C functions documented 1990:
A charmingly compact set... We've sure come a long way since then, but as I'm always interested in simplicity, it is fascinating to see how much power came out of so few commands and functions, twelve years ago...