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

Re: CPL Computation

    Given that reversed reversed postorder treewalk (or
    last-visited preorder) is the tiebreaker, that there is at least
    one suspicious Flavors-order example, that people can formulate
    their lattices as they want to get the right inheritance, that
    there is no intuition to any order beyond what the topological sort
    gives you, and there is a possible performance problem with the
    algorithm described in the New Flavors document, I have now flipped
    my bit on this issue from wanting to mimic the Flavors order to
    insisting on preorder tiebreaker with topological sort.

    Everything says pt5 should precede pt4, but Flavors doesn't. I
    believe this to be a serious problem.

I don't believe this.  The argument for the New Flavors (and
Bobrow/Kiczales) ordering is the following.  If the user has a class (a
mixin), and for reasons known to them splits that class into two classes
e.g. (p3' into p3 and p4), with no other references, there should be no
chance of any interaction with any other class used as a mixin. Hence
one wants all superclasses of a class to follow as soon as possible
after the class they are referred to.  As soon as possible is what you
get from last-visited pre-order walk. 

Moon-walk (which is what is in B/K) is a reasonable implementation of
"last-visited pre-order walk".  We don't have to describe the algorithm
and the effect in one paragraph.   The effect is a linearization of a
full tree walk maintaining only the last visit.  The computation
computes it from the rear to avoid revisits.