Tcl Heritage

Difference between version 37 and 38 - Previous - Next
''Purpose: meditate on how other systems/languages shaped Tcl -- started by [Richard Suchenwirth] - please add what you think!''  Of related interest is the [Tcl chronology].
----
'''[TRAC]''' Text Reckoning and Compiling
   * the original "everything is a string" language.

'''[UNIX]''' (borrowed from '''Multics''' [http://www.multicians.org]):
   * "everything is a string" (at least command line arguments, argv)
   * the environment as a string->string mapping (::env array in Tcl)

'''[Multics] Command Language'''
   * cwd, pwd, and command execution [http://www.multicians.org/multics-commands.html]
   * commands that start with the standard streams for '''standard_input''', '''standard_output''', and '''error_output'''[http://www.multicians.org/mgs.html#standardoutput]
   * separation of commands by semicolon or newline
   * indication of optional parameters by name following a dash ("-"), e.g., [[if ... -then ... -else ...]]
   * Optional parameter names with both a long form and a short form, e.g., -home_dir or -hd
   * separation of parameters by whitespace
   * expansion of embedded commands [[..]] before calling the first command
   * # as comment marker
   * grouping of words with ".." and `..'
   * method of searching for unknown commands when encountered during processing (what's the exact concept here?  Is it the implicit [exec]ification when running in the interactive shell?  A more proximate source for that might be the Unix shells, or even [Rexx]. The concept is ''dynamic linking.'' When there is a command encountered that is not found, then the ''search rules'' are used to find a segment that defines the command so that it will be dynamically loaded. This dates from the mid 1960s, and I believe before the Unix shells.)
   * dynamically loading and linking commands
   * replacement of loaded procs with new ones while still running

'''UNIX shells''' (borrowed from '''Multics Command Language''' [http://www.multicians.org/mspm-bx-1-00.html] shell [http://www.multicians.org/shell.html]):
   * the names ''tclsh'', ''[wish]'' (specifically the ..sh ;-)

'''Bourne family of shells (sh/[ksh])''':
   * [cd], [pwd], [exec]
   * separation of commands by semicolon or newline
   * separation of parameters by whitespace
   * expansion of parameters before calling the command
   * expansion of embedded commands (``..`` in shells, [[..]] in Tcl which nests better) before calling the first command
   * expansion of variables with $ ($x as shortcut for [[set x]]; not in earliest Tcl, but introduced by [Karl Lehenbauer])
   * grouping of words with "..", which allows expansion
   * grouping of words without expansion (Unix shells use '..', Tcl has {..} which nests better--but see below) 
   * # as comment marker
   * redirection of stdout and stdin

'''BSD's csh family of shells''':
   * tilde expansion (~suchenwi or ~/bin..)
   * redirection of stderr
   * history command

'''UNIX tools''':
   * [expr] (though Tcl's is much more powerful)
   * dash as switch marker (ls -l, glob -nocomplain)
'''Assembler:'''
   * ''incr'' (GfA Basic had that too, but assemblers were way earlier ;-)

'''Awk/Lex/Egrep:'''
   * regular expressions, ''[[regexp]]'', ''[[regsub]]''. (But ''[[switch -regexp]]'' really feels like something from Snobol or Trac!)

'''[Awk]:'''
   * associative arrays (Yes, I know, Snobol had them first, too!)

'''[C]''':
   * ''stdin, stdout, stderr''
   * ''argv'' (argc unneccessary, we have ''[[llength $argv]]'')
   * ''for'' loop, ''while''
   * fopen, fputs, fgets, fclose, ftell - minus the leading f
   * sprintf is ''format'', especially the format string syntax
   * putting code blocks in braces (but much more generalized in Tcl)
   * ''expr'' syntax (infix operators, functions, parens..)

'''[C++]''':
   * the name::space syntax (not exactly the most beautiful, tho)
'''[FORTRAN]''':
   * parens as marker for array elements (but different functionality)
   * ''if'' statement (well, they had that earlier than C ;-)

'''[LISP]''':
   * lists as major data structure (though not implemented as chains of cons cells)
   * dynamic handling of list lengths
   * Polish notation, command is always first word
   * dynamic binding of commands, rename, replacing proc's at run time, code as data,''[[eval]]''.
   * set returns value being set, I actually begged John to do this in the day. BTW, where did John get the idea of program glue?  I first saw TCL at UseNIX after writing a small [LISP] library that was meant to let different programs pass data and command execution across pipes or network connections, that was program glue. things like fileevent are key to this.

'''[[Incr Tcl]]'''
   * Namespaces
'''SCL'''
   * [[Sometime we need to ask JO about this.]]   * In the '780s (?), CDC's NOS/VE OS included System Command Language (SCL) [https://www.museumwaalsdorp.nl/en/history/computerhistory-background-information/nosvescl/] which was embeddable and extensible.  Applications and the OS could embed other applications (and the OS?) with pleasing symmetry and convenience.
   * [[Was it Steve Lidie who observed this?]]

'''X Window System:'''
   * the event model (as opposed to either multithreading or PL/I-style ''on''-units) (see [Tcl event loop]) .
   * resource "database"


'''(not sure)''' (but all quite important to the character of the language; we need to ask John or Brent or Karl)
   * [uplevel], [upvar]
   * [info]
   * [trace] [[Note that [ksh] had traces--"discipline functions"--in 1988.]]
   
----
It strikes [CL] that grouping is crucial.  Tcl's like [Forth], [Lisp],
[shell], and so on, but it elaborates "grouping" (what might be
lexification in other languages) more than any other.  [C] and [TeX]
were two quite different predecessors that both use {} for a
conceptual variety of grouping operations.  [m4] has `', rather
clumsily.



----
Updates by:
''KBK'' (7 November 2000) - 
''[LV]'' (Nov. 07/08, 2000) - [CL] (2001 ...) - [escargo] (Oct. 9-11, 2002)
----
See also [Is Tcl different!] - [Arts and crafts of Tcl-Tk programming]


<<categories>> Language |  History of Tcl and Tk