Previous: Compiler Transformations, Up: Slot-Value


7.3 MOP Optimizations

Even when nothing is known at compile-time about the call to slot-value, it is possible to do marginally better than in Example 7.2. Each effective slot definition metaobject can cache its own effective method, and the discriminating function for slot-value-using-class is set to simply call the function in its slot definition argument.

(FIXME: I'm pretty sure this is a bad plan in general. Or rather, it's probably a good plan, but the effective methods should probably be computed lazily rather than eagerly. The default image has 8589 closures implementing this optimization: 3 (slot-value, set-slot-value and slot-boundp) for each of 2863 effective slots.)

(Also note that this optimization depends on not being able to specialize the new-value argument to (setf slot-value-using-class).)