This reference page describes how arrange for OTcl classes and
their methods to be demand loaded. The mechanism extends the existing
Tcl autoloading scheme (with which you should be familiar) by using an
otcl_mkindex procedure to add entries to a tclIndex
file. It allows you to distribute classes across files without
additional concern for inheritance dependencies, as well as distribute
a class's methods across files.
To add OTcl load entries to a tclIndex, use the
otcl_mkindex procedure, defined during OTcl
initialization. For example, to update the tclIndex in the
current directory for the demand loading of classes, issue this shell
command:
echo "otcl_mkindex Class . *.tcl" | otclsh
otcl_mkindex takes the same directory and filename pattern
arguments as auto_mkindex, but also takes a list of classes
as its first argument. This list, the creator list, describes the kind
of objects that are candidates for demand loading. Usually this will
be Class, as above, to cause index entries to be generated for
classes. But it may also specify other classes if you are working with
meta-classes or need loading for regular objects.
otcl_mkindex appends the tclIndex file directly, and
returns a string describing the number of object and method index
entries it generated.
Like auto_mkindex, otcl_mkindex will only find
obvious candidates for demand loading. Both explicit creation, via the
create method, and implicit creation, via a method name that
is not a known method of Class, are considered in the
search. Objects (but not methods) must be created at the hard left
margin, and object and method names may not begin with "$".
Autoloading of class and object commands is triggered via the
regular Tcl unknown mechanism, so that invoking a missing
class or object command will cause it to be loaded. In addition, OTcl
demand loads in two other ways.
First, unknown classes referenced as superclasses will be demand loaded. This is triggered internally by the OTcl system. It means that you can distribute classes across files without concern for sourcing the files in inheritance order. It does not mean, however, that you can make forward references to classes within a file, or mutually recursive forward references across files.
Second, undefined methods may be demand loaded when they are
invoked. This is arranged for autoloaded classes by the OTcl object loader,
otcl_load. It means that you can distribute the definition of
a class and its methods over more than one file.
Method level loading works as follows. When a class or object is
being autoloaded by otcl_load, only those methods defined in
the main class file that is sourced will be fully loaded. Other
methods that are known to exist because of auto_index entries
are then filled with load stubs by using the auto option of
the proc and instproc methods. This guarantees that
if they are invoked, they will be loaded. Note that these method load
stubs must be installed, rather than relying on an unknown-style load
scheme, to cater for the shadowing of methods. Also, you can control
your own load policy by rewriting otcl_load.