Hello CL Pros,
Lately I have been trying to understand the inner workings of the MOP slot protocol as I go through yet one more reading of the usual CLOS litterature (CLHS, AMOP, OOP The CLOS Perspective).
To that end I put together a little test file (here attached) and ran its code in sbcl, clisp, ccl, acl and lispworks. I got different results in pretty much each CL implementation on the tracing of calls to slot-value-using-class.
I am puzzled and baffled.
The results I see go like this:
sbcl: only accessors (foo-a) call s-v-u-c.
clisp: both accessors and cl:slot-value call s-v-u-c.
ccl: s-v-u-c is called neither by cl:slot-value nor by accessors.
acl: both accessors and cl:slot-value call s-v-u-c.
lispworks: only cl:slot-value calls s-v-u-c.
Only clisp and acl seem to agree.
And the cherry on the cake's icing comes with sbcl when then defmethod on s-v-u-c is moved ahead of the defclass/make-instance sequence. Then, in sbcl, both accessors and cl::slot-value call s-v-u-c as in clisp and acl.
So my question is: Which one is right?
Thank you for your help.
Jean-Claude Beaudoin