Re: call-next-method invocation order
"Eric M. Ludlam" <[email protected]> Sun, 18 Jul 2010 22:31:52 -0400
| Newsgroups | gmane.emacs.eieio |
|---|---|
| Message-ID | <[email protected]> |
On 07/18/2010 07:16 PM, Jan Moringen wrote: >> Well it's kinda a complex example but the point why I bother you guys >> with it is if I run this example on Allegro CL I get a different result; >> BTW if I add :method-invocation-order :depth-first to class derived2 I >> get the same result as on Allegro CL; > > EIEIO has three linearization methods: depth-first, breadth-first and c3 > (see [1]). The default is breadth-first search which can reach base > before derived1, as your td2 example shows, since paths from derived3 > have length 2 in both cases. The method used in CLOS (and therefore > probably in Allegro CL) is different from all three and also described > in [1]. > > In many cases, even complex hierarchies, the c3 linearization mentioned > in [1] does the right thing. Your example should work with c3 > linearization. It can be used in EIEIO > with :method-invocation-order :c3. > >> As I'm not an expert in CL I'll leave it up to you guys what to do with it; > > Maybe the documentation can be improved. I was re-writing bits of the doc today based on the first question when I noticed that :c3 wasn't there. Then I noticed the doc didn't say what the default was. So I tried making :c3 the default (thus solving some of these issues from happening by default) and found that CEDET didn't build properly. (Complaints of malformed hierarchies.) Things then stalled for me and I didn't have time to finish. If this is going to be a common issue, I'd like to try and get this new mechanism in as the default, but it may take a while. Eric ------------------------------------------------------------------------------ This SF.net email is sponsored by Sprint What will you do first with EVO, the first 4G phone? Visit sprint.com/first -- http://p.sf.net/sfu/sprint-com-first