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

Re: CLOS With-Accessors

    Date: Fri, 10 Apr 1992 14:50 EDT
    From: moon@cambridge.apple.com (David A. Moon)

    > Date: Wed, 8 Apr 1992 13:09-0400
    > From: barmar@Think.COM (Barry Margolin)
    > ....
    > P.777 of CLtL2 contains the restriction "Any accessors specified by
    > WITH-ACCESSORS must already have been defined before they are used";
    > this line comes direct from the CLOS spec.  And the ANSI draft's
    > description of WITH-ACCESSORS says, "The consequences are undefined if
    > any accessor-name is not the name of an accessor for the instance."
    > In the case of the first quote, I'm not sure what it means by "used";
    > does it mean "called" (i.e. at runtime), or does it mean "seen by the
    > compiler"?  I'd like to think that the former was intended, but that's
    > true of *all* functions so I don't think the designers would have made a
    > special point of it.
    > The second quote has me even more confused.  It may be intended just to
    > restate the restriction in the first quote.  This sense of the term
    > "accessor" is never defined precisely in the standard (there's a
    > definition of "accessor" that refers to generalized references -- e.g.
    > CAR is this kind of accessor).  Nowhere is it ever stated that :ACCESSOR
    > defines this kind of accessor; it is just a shorthand for defining the
    > appropriate methods yourself (it might also make use of
    > implementation-specific optimizations, but those should be transparent
    > unless you're timing or using the metaobject protocol).
    > Finally, these restrictions appear to contradict other parts of the CLOS
    > spec, which say that WITH-ACCESSORS is equivalent to a use of
    > SYMBOL-MACROLET that replaces the "variable" references with calls to
    > the specified accessor.  Why should this SYMBOL-MACROLET expansion be
    > dependent on how the accessor is defined?

    Don't look at me, I never understood what this sentence is trying to say.

    However, if I was forced to guess, I would guess that the sentence from
    CLtL2 means that with-accessors is only a syntactic transformation: it
    will generate calls to some functions but it won't define the functions
    if they aren't already defined.  You still have to use :accessor or
    :reader or :writer in your defclass, even if you never directly write
    calls to the functions defined there in your program, but only use
    them indirectly via with-accessors.

That's a possible interpretation.  That's certainly what I *thought* we
intended to require.

    I'm completely clueless about the quote from the ANSI CL draft.  Do you
    think it's a garbled paraphrase of the quote from CLtL2?  Or did it come
    from someplace else?

My initial guess was that it was an attempted restatement of the other
quote.  If it came from somewhere else, I have no idea where that could
have been.