[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
run-time method definition
>Sender: KK@sierra.csc.ti.com
>Date: Tue, 11 Oct 88 11:10:49 CDT
>From: Kerry Kimbrough <Kimbrough@dsg.csc.ti.com>
>
> > Date: Tue, 11 Oct 88 08:29 CDT
> > From: William D. Gooch <ai.gooch@MCC.COM>
> > Subject: LISP X based toolkits
> >
> > Date: Tue, 11 Oct 88 17:25:07 JST
> > From: Haruyuki Kawabe <kawabe@etl.jp>
> >
> > But it seems to me that it is too heavy in most implementations to add
> > or remove methods at run time because of re-hashing of a method table
> > or similar things in order to speed up of generic-function callings,....
Excuse me, only adding (eql instance)-specialized methods to a generic
function is not so heavy. Please ignore my opinion above.
> b. eql method: (make-instance 'standard-method ... :function
> function :lambda-list `((eql ,contact) ...)) creates a callback
> associated with a contact instance. (add-method generic-callback
> method) adds this method to a generic function. Callback is
> invoked by calling generic-callback with contact as specializer
> arg.
>
> Con: Extra complexity: closure required to "package"
> application-supplied callback args. Deleting a callback
> is harder. Prevents contact and callbacks from being
> garbage-collected.
>
>
>The concern about deleting a callback is that it would involve remove-method,
>but there's no find-generic-function, and find-method requires you to recall a
>callback's full lambda list.
So callback methods should take only one argument which is (contact
(eql instance)) and other application-supplied data are closed using
closures when these methods are created. Then you can easily find your
method. (Generic-function objects could be refer by (FUNCTION
generic-function-name)) Moreover a clousre is stronger and more
convenient than passing application-supplied callback args using
ADD-CALLBACK when they changes frequently.
Haruyuki Kawabe
Knowledge System Department
Nihon Unisys Ltd.
2-17-51 Akasaka, Minato-ku,
Tokyo 107, JAPAN
e-mail: kawabe%etl.jp@relay.cs.net