Tcl interp creation time more than doubled in 9.{0,1,2} compared to 8.6 as reported in This difference has mostly been negated for 9.0.3 with zipfs related fixes. However, opportunities for further optimization remain. One of these is loading of TclOO. As measured on my system, TclOO initialization takes up close to 40% of interp creation time.

Since a very substantial (majority even?) number of Tcl applications do not use oo, one possibility is to lazy load TclOO. The branch implements a proof of concept for this.

For comparison:

Current main branch:
```
%  timerate {interp delete [interp create]}
1861.39 µs/# 537 # 537.23 #/sec 999.566 net-ms
```

apn-oo-lazy-init branch:
```
% timerate {interp delete [interp create]}
1175.20 µs/# 850 # 850.92 #/sec 998.919 net-ms
```

Test suite passes.

The implementation creates stubs commands for the public oo commands that do initialization on first call. The initialization in turn overwrites the stub implementations with the "real" oo implementation.

Other implementation strategies may be possible (tclIndex, unknown etc.) but need to keep in mind all code paths need to be covered (e.g. initial invocation through `namespace path`, use of `info class` commands before any public oo commands etc.

Comments on the proposal, improvements, breakage or even alternative methods appreciated.