[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Amendments requiring additional writing



A slightly modified version of Moon's pararaph to remove references to
change-class

   1-11: Replace the last paragraph with the following two paragraphs:

    If in the new version of the class there is an instance slot of the
    same name as any slot in the old version of the class, the value of
    that slot will be the same in both instances.  This means that if
    the slot has a value, the value returned by {\bf slot-value} after
    the class is redefined {\bf eql} to the value returned by {\bf
    slot-value} before the class is redefined.  Similarly, if the slot
    was uninitialized, it remains uninitialized.

This is fine so far.  But the following is problematic.

    At the moment a class is redefined, if the new version of the
    class contains a shared slot of the same name as any shared slot in
    the old version of the class, the value of that slot will be the
    same in both. 
 
Should this be true?  Will changing the context of the defclass form not
effect the value of the class slot.  I think this is a mistake.
Redefining the class should set the value of the class slots, and
whether that value is EQL or not must depend on the evaluation form and
context.

I also have a problem with:

    If in the new version of the class there is a shared slot of
    the same name as any local slot in the old version of the class,
    that shared slot is initialized to the value of the corresponding
    {\bf :initform} option of the new class, or remains uninitialized
    if the new version of the class does not specify or inherit the
    {\bf :initform} option for that slot.  Shared slots are not
    affected by the updating of an instance.

This again seems mistaken for me.  What value should go in the new
shared slot -- that is, from which particular instance will it be set.
I think the correct paragraph would read:

    If in the new version of the class there is a class slot of the
    same name as any instance slot in the old version of the class,
    that class slot is initialized by the redefinition of the class,
    and is not affeced by the value of any slot in any of the
    instances.  If there is an instance slot in the new definition of
    the class that is the same name as a class slot in the old version
    of the class, then on updating, the value of each instance slot is
    given the same (EQL) value as the that in the old class slot.  If
    the class slot in the old version of the class was uninitialized,
    then the instance slots in the new instances are initialized as if
    they were new slots in the instance.