[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
- To: common-lisp-object-system@SAIL.STANFORD.EDU
- Subject: ECOOP Reaction
- From: Dick Gabriel <RPG@SAIL.STANFORD.EDU>
- Date: 06 Jul 87 1130 PDT
As Kempf points out, there was some negative reaction to CLOS at my
presentation, but most of it was directed at the lack of encapsulation and
protection, multiple inheritance, and the use of CLOS as a knowledge
representation system. I might point out that most of the people who
raised objections during the presentation came up to me afterwards to get
a hold of the spec, the code, etc.
I want to make clear what it is I said about the CPL computation: I stated
that the effect of the CPL algorithm was difficult to understand, not that
the algorithm is difficult to understand. The difference between the two
is that an algorithm can be easy to grasp while a characterization of it
suitable for a programmer to understand is not available. In contrast,
the algorithm for computing the strongly connected components of a graph
is easy to understand as an algorithm, and it is easy to understand what
it does because the definition of a strongly connected component is easy
to understand. The CPL is understood to be a total ordering on a class
and its superclasses, but the only characteriztion of it that I know of is
that the CPL is the total ordering computed by the algorithm. That
algorithm is understandable at the operational level, but there is no easy
characterization of it.
What would constitute an understandable characterization of the CPL?
Here are some examples of approaches:
1. We could have a set of constraints on the classes such that the CPL
is the unique total ordering satisfying those constraints.
2. We could have a set of inheritance situations such that when two
graphs of classes were inherited in particular ways, the new CPL was
predictable. For example, suppose we have 2 graphs, G1 and G2, with no common
classes except for the class named T and suppose that C1 and C2 are the
bottom-most classes of G1 and G2, respectively; then if a class C is
a subclass of C1 and C2 in that order, the classes in G1 precede the classes
in G2, and the classes in G1 are in the same order as they are in the CPL
for C1 and similarly for G2; T comes last.
But we do not have such a characterization; Moon's constraints are close
to it, but not good enough. Possibly we can search for the
characterization. Remember that at the Palo Alto meeting in March, smart
people like Scherlis could not understand the effect of the algorithm,
although they (and he) thought the algorithm was simple.
Intellectual honesty compels me to point out things like this when
I address an audience. I suppose it annoys people when I do that,
but maybe we should give some thought to designing a language such that
there are few oppurtunities for ``Gabriel's inevitable critique.''