Superclass linearizations for Dylan

A superclass linearization (also known as a class precedence list or CPL) is used for resolving conflicts among multiply-inherited superclasses which provide differing definitions of the same method. As part of the design of Dylan, several of us studied the properties of linearizations and algorithms for constructing them. The results are discussed in:

The paper was presented on 12 October 1996 at the 1996 Object-Oriented Programming Systems, Languages and Applications (OOPSLA '96) conference in San Jose, California. The abstract for the paper is:

The paper is available in HTML and PostScript.

Our paper compared several linearizations. Untested source code for all of them (in Dylan) is available below. See the paper for details about the linearizations and their implementations.

dylan-linearization.dylan
The linearization used in Dylan, as defined by the Dylan Reference Manual.
c3-linearization.dylan
The C3 linearization, proposed by our paper. We recommend this linearization for anyone designing an object-oriented language with multiple inheritance and implicit resolution.
clos-linearization.dylan
The default linearization used in CLOS, the Common List Object System.
lloops-linearization.dylan
The L*LOOPS linearization proposed by R. Ducournau, M. Habib, M. Huchard, and M.L. Mugnier in Proposal for a Monotonic Multiple Inheritance Linearization, OOPSLA '94.

(Coming some day: slides from the talk I gave at OOPSLA.)


Paul Haahr