Tcl has a variety of types of commands. The following are all types of command which are indistinguishable to their caller (that bit is important): * TclOO objects - * [namespace ensemble]s - * [coroutine]s - * [proc]s * built-ins and [extension]al C commands * [interp]s and hidden commands * [thread]s (not strictly true, but trivially simulated.) The interesting thing about this is that each of these command types can fully simulate the others. [CMcC] Some of them are ensemble commands, we might say. Namespace ensembles, TclOO objects, interps in a sense contain other commands, or simulate their containment. I look forward to the day when a builtin is being simulated by a coroutine, or a builtin is provided by a coroutine. One could possibly stretch the analogy to include the [reflected channel] mechanism, since it is defined over a user-supplied container of commands. The distinction between different kinds of command containers is probably the type of state they support, and the degree and kind of encapsulation they provide for state. ---- !!!!!! %| enter categories here |% !!!!!!