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

Symbolics design review



Symbolics is having an ongoing in-house design review of the proposed
standard.  The reviewers understand that the proposal isn't finished yet,
but it seemed like a good idea to get some review before we mail it out to
the X3J13 folks.  We had a meeting yesterday.  Here are some highlights of
comments that people had.  I've omitted editorial comments on the document
(although some were quite important) and also omitted comments that were
minor, that only indicated that things were hard to understand, or where I
wanted to think about it more before I could figure out how to summarize
what was said.  I'll keep relaying additional comments as they crystallize.

The proposal in its current form is quite incomplete.  Many functions that
one would expect to be there are missing, for instance there are functions
get class and method objects but little you can do with one once you've
gotten one.  I explained that these were in the meta-object protocol that
wasn't written yet.  It's really not that simple; there is a gray area
between full meta-objects (where the programmer is trying to use the
standard facilities as an assist in creating her own object-oriented
programming system) and simply wanting to access the standard meta-objects
without creating any new meta-object classes.

The lambda-list congruence rules need re-examination.  Detailed comments
later.

Several people thought WITH-SLOTS was awfully verbose.  No real conclusions
were drawn other than that Symbolics would continue to support the Flavors'
syntax of DEFMETHOD, with its useful implicit WITH-SLOTS.

Everyone found :allocation :none confusing and ill-motivated.  A real
example of how to use it would help a lot.  At first it seems to be
subtractive inheritance, a la Alan Snyder's Common Objects, but this
example shows that it doesn't do that:
  (defclass c1 () (a :initform 2))
  (defclass c2 (c1) ((a :allocation :none)))
  (defclass c3 (c2) (a))
and the A slot of a C3 is initialized to 2.  The group also wasn't happy
with the idea that c2 "breaks" c1.  Maybe :allocation :none is really for
something else, such as "abstract" slots that show up in with-slots and
have access methods, but aren't explicitly stored?  Anyway we'd like to see
some motivation and an example, or if there isn't any then we think it
should be flushed, because it is so confusing and hard to explain.

Many things are not explained very well and people couldn't understand
them from the document; they had to be explained verbally.  I guess we
ought to put together a list of these.

ADD-METHOD, REMOVE-METHOD, GET-METHOD don't seem to work right; things
that should work signal an error (details later).

The Design Rationale section is out of date and extremely incomplete.
It's important to flesh this out.

That's it for today.