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

Re: Some invariants



    Date: 7 Jan 87 18:16 PST
    From: Masinter.pa@Xerox.COM

     (let ((x (make-instance 'foo))
	  (y (make-instance 'foo))
	(setf (foo-slot x) 3)
	(setf (foo-slot y) 4)
 
	(foo-slot x))

    It would be bad programming style for foo and its slot foo-slot to
    behave in a way that this returned something other than 3 without
    explicit documentation about this (fairly odd) behavior. Normally, one
    would expect that each value returned by calls make-instance to be
    independent of each other in this informal sense.

    As long as this is a style recommendation rather than an implementation
    requirement, expressing it as an "invariant" might be the wrong form of
    expression. 

    Independent of the wording, do you agree with the sentiment?

I agree that a foo class that caused this program to return 4 would be
considered fairly odd and hard to understand.  I certainly think it would
be wrong for the language to make it impossible to implement such a class;
I've had users plead with me that it was very important for them to be able
to do this (have make-instance do interning of one sort or another).

The style recommendation is fine, although it may be superfluous to put it
into the standards document.