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

MacIvory conversion experience

    Date: Tue, 21 Feb 89 18:20 EST
    From: Michael Greenwald <Greenwald@stony-brook.scrc.symbolics.com>

	Date: Tue, 21 Feb 89 17:12 EST
	From: Barry Margolin <barmar@Think.COM>

	    Date: Tue, 21 Feb 89 15:32 EST
	    From: Michael Greenwald <Greenwald@stony-brook.scrc.symbolics.com>

	    A second flaw, too.  What if you redefine the function to have a
	    different arglist?  HIDDEN-ADVISE won't be up-to-date, and, in fact,
	    might raise an error.  ADVISE (actually all forms of encapsulation) is
	    (are) supposed to work across redefinition of the function.

	I thought about that, and decided that it isn't really a problem.  If
	the argument order changes, a piece of advice that is using CAR, etc.
	and hasn't been updated would also be incorrect, so it's no worse than
	the current situation.  

    I disagree (mildly).  There are two differences.  In the CAR case (or if
    the ADVISE form explicitly uses (destructuring-bind arglist ..)) then the
    bug is in the user code, not in the system utility.  

You DOCUMENT the limitation of the system utility.  I don't think anyone
really expects you to make advise work as well as instance variables
across redefinitions.

							 Second, if ADVISE did
    the destructuring-bind itself, then it would raise an error even if the
    user >didn't< use the feature explicitly.

That's why it should use ZL:DESTRUCTURING-BIND, which never signals an

    How about a compromise: we document the trick of using DESTRUCTURING-BIND
    of the ARGLIST, and warn that if you redefine the arglist you'd better
    redefine the advice, too.  Maybe we even provide a macro you can use
    inside the body of your advice.

Well, this macro would have the same limitations as if the feature were
built into ADVISE.

    I don't know if this would get into the system in the near future, either.

Hey, I submit feature requests all the time with the full knowledge that
90% of them will never be implemented.  But it never hurts to hash out a
strawman design.