APN Notes on what I have learnt about TclOO method dispatching - see [L1 ]
DKF: In terms of implementation, a few extra notes. There is an internal function called TclOOGetCallContext that returns a call-chain handle for a method, constructor or destructor, and which is called when you invoke the method. The call chain is then fixed for the life of the invocation of of the method; TclOOInvokeContext (the other major function in this area) then just walks the chain. TOGCC uses caches heavily, at all of the object, class and Tcl_Obj method name levels.
One thing I've discovered (probably relates more to variable access as opposed to dispatch) is that it is significantly cheaper to declare a variable in the class definition as opposed to using my variable in the method itself. For example,
class create C {
constructor {val} {my variable v ; set v $val}
method m {} { my variable v ; return $v }
method n {} { return 5 }
}
class create D {
variable v
constructor {val} { set v $val }
method m {} {return $v}
method n {} { return 5 }
}The numbers below show D.m is almost twice as fast as C.m, presumably because the variable resolution is all done in C at method dispatch time as opposed to needing a separate my variable call at script level.
(woof) 70 % C create c 8 ; D create d 8
::d
(woof) 71 % time {c m} 10000
7.6739 microseconds per iteration
(woof) 72 % time {d m} 10000
3.9759 microseconds per iteration
(woof) 73 % time {c n} 10000
3.643 microseconds per iteration
(woof) 74 % time {d n} 10000
3.583 microseconds per iterationSignificant in a real application? Who knows.