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

Re: accessor functions



    Date: Fri, 25 Jul 86 12:10 EDT
    From: Daniel L. Weinreb <DLW@QUABBIN.SCRC.Symbolics.COM>

        Date: Thu, 24 Jul 86  12:25:12 PDT
        From: Alan Snyder <snyder%hplsny@hplabs.HP.COM>

        Indeed, this does seem somewhat redundant with the package system.
        Do you (and your users) also typically define a separate package for
        an entire "class-tree"?  If so, why not use CLASS:NAME instead of
        CLASS-NAME?

    Well, actually, even apart from object oriented programming, one always
    has to make the choice between putting things in their own package, or
    using a prefix, or whatever.  I don't think we've been using New Flavors
    long enough that a very clear dominant style preference has emerged.

    I recently converted our error/condition system to use generic functions
    wherever it used to use messages.  It happens that there's already a
    package called DEBUGGER, or DBG for short, that doesn't have much in it
    besides the error/condition stuff and the interactive debugger.  So
    several of the generic function names are simply things like DBG:REPORT,
    DBG:PROCEED-TYPES, etc.  On the other hand, we also used the names
    DBG:CONDITION-STATUS and DBG:CONDITION-TYPE, which we felt were clearer.

Even better would be DBG:CONDITION:STATUS and DBG:CONDITION:TYPE I would
think (if such a thing were legal).

    In any case, I think this is the same issue that arises with non-generic
    function naming, and doesn't have anything to do with genericness (with
    object-oriented programming) per se.

There are many cases where the introduction of object-oriented programming
tends to focus attention of existing problems in Common Lisp.  The package
system is probably the worst offender.  However, if you are implying that
because these problems are already in Common Lisp we should not worry about
them now, I disagree.  The interactions with object-oriented programming make
it especially important that these problems be fixed now.

        Also, do you use the CLASS- prefix for ALL operations defined
        on a CLASS, or just the instance variable accessor functions?
        I notice in the SHIP example in the December 85 New Flavors paper that
        the function SHIP-MASS is defined to read the MASS instance variable,
        but the function SPEED (rather than SHIP-SPEED) is defined to
        compute the speed.  Is MASS less generic than SPEED?

    I don't know about the particular example, but in general there is no
    reason to treat an instance variable accessor function any differently
    than any other generic function.  They could have been written by hand,
    if defflavor didn't provide a handy-dandy convenience feature to write
    them for you.  Most important, the caller does not and should not know
    whether any generic function is or is not an instance variable accessor
    function; that's the business of the implementation, and not visible in
    the protocol specification.

I agree completely.  Why then is there a conc-name feature (with a particular
default) for automatically generated functions and not for those explicitly
written?
-------