[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: :accessor-prefix bug
- To: kempf%hplabsz@hplabs.HP.COM
- Subject: Re: :accessor-prefix bug
- From: Rick.Busdiecker@H.GP.CS.CMU.EDU
- Date: 30 Sep 87 13:07 EDT
- Cc: CommonLoops.PA@Xerox.COM
- Redistributed: CommonLoops.PA
- Reply-to: Rick.Busdiecker@cs.cmu.edu
From: kempf%hplabsz@hplabs.HP.COM
> I think that that makes with-slots into a truly dangerous form.
> Code that uses with-slots without the :prefix can be broken by adding a
> slot to the class definition.
That's true whether or not the :prefix option is there, and whether or
not you use WITH-SLOTS or the accessor function directly. If you delete
a slot (for example) the accessor function is undefined, so any method
using the accessor function will break. Similarly, if you delete a
slot even using the :PREFIX option, the code within the WITH-SLOTS
would need to be changed, otherwise it will break when you try to
reference the slot next time (precisely, a call to SLOT-MISSING will
occur).
The case of deleting a slot doesn't worry me as much since code that
referenced a slot which no longer exists must be fixed for semantic
reasons. In the case of adding slot, with slots causes a new binding
for some symbol. Something like:
(defclass foo () (a))
(defmethod bar ((foo foo))
(let ((b :value-i-expect))
(with-slots (foo)
. . .)))
. . .
(defclass foo () (a (b :value-that-breaks-my-code)))
shows how code might be broken in a way that (a) might not be related
to the new semantics related to the slot addition and (b) could easily
have been prevented locally in the bar method with:
(defmethod bar ((foo foo))
(let ((b :value-i-expect))
(with-slots ((foo :prefix foo-))
...)))
Is there another mailing list where changes to the specification are
being discussed before the decisions are made? Would someone please
add me?
Rick