[comp.lang.clos] Buy No Metaobject Wine Before Its Time formerly, "accessing clos objects"

jonl@LUCID.COM (Jon L White) (02/15/91)

Skip, your critique of the alleged Symbolics statememnt on metaclass
capabilities seem a bit too strong to me.  Let me offer some mild
support for the alleged symbolics position, and see whether or not
your reply is really directed towards their real position.

1) The errors emanating from MAKE-INSTANCE in jkelly's case were
   *probably* not the intended behaviour of Genera 8.1 (someone else
   may correct me if I'm wrong); I would interpret the Symbolics
   customer support statements as trying to provide a workaround for
   this situation -- if it "hurts" when you bend your elbow like this,
   then don't bend your elbow like this -- the same end-user results
   may be achieved with non-metaclass programming.  [And hopefully,
   your next android model won't have a squeaky elbow.]

2)  2a)  there is no "THE" metaobject protocol;
    2b)  but there are numerous proposals for metaobject protocols;
    2c)  and there are many more actual "metaobject" protocols -- for
         clarification as to why there MUST be many, see 2e below;
    2d)  the writers of the CLOS proposal to X3J13 (the "Chapters 1
         and 2" draft widely reprinted in Sigplan Notices in Sep 1988,
         and in CLtL/II) were fully expecting that an acceptable amount
         of metaobject specifications would be forthcoming in the
         subsequent "Chapter 3";  sigh, the best laid plans of . . .
         Note that some "Chapter 1 & 2" parts don't really make much
         sense without more of what might have been included in
         "Chap 3" (e.g., ADD-METHOD); and other parts of "Chap 2"
         appear to have been dropped or omitted possibly out of a
         mistaken belief that they weren't useful without "Chap 3"
         (e.g., ALLOCATE-INSTANCE, which is critical to good use
         of MAKE-LOAD-FORM; for the latter, see CLtL/II p.659)
    2e)  as the symbolics implementor mentioned, what is popularly
         *thought of* as "Chap 3" is very PCL specific, and would
         likely have to undergo many changes before being acceptable
         as any kind of community standard.  The reason why these early
         versions HAD to be PCL specific is that the very essence of
         "metaobjects" is that they are the objects needed to implement
         the system.  Just what is "necessary and good" to implement CLOS?
         Well, as you suggest, a turing machine is adequate; but certainly
         not desirable  (can you imagine at Turing Machine Protocol!)
         As more implementations of CLOS become known, and as more
         users of CLOS press their demands for system tailoring, then
         we as a community will begin to see just how far we can go to
         specify a "metaobject protocol" without unduly crippling the
         underlying implementational technologies.  To put this question
         into perspective, I refer you to one of the earlier issues of
         Lisp Pointers, to an article proposing some standards for Lisp
         Interpreter interfaces -- it went by the name COMMON EVAL.  The
         critique against it was that it specified far too many irrelevant
         details as to how any intepreter must work; the critiques also
         were that it was specification via a piece of Lisp code rather
         than by a set legalistic English sentences (i.e. it was too
         metacircular).  But it very clearly showed up the real problem of
         "metaobject" protocols -- that one is fighting a battle on the dual
         fronts of permitting the end user access to the implementation
         details at some level, yet shielding him from the accidental coding
         kludges used by some one individual implementor.


To resovle this issue -- of just "what" and "how much" would be desirable
as a CLOS metaobject protocol -- more people need to understand the issues
involved in implementing a CLOS.  In recognition of the fundamental nature
of this need, I applaud the work of Gregor Kiczales, Jim Des Rivieres, and
Danny Bobrow of Xerox PARC in producing a book(?) which presents a limited
subset of CLOS and an implementation therefor in an understandable way (it
is called CLOSSETTE -- a little CLOS perhaps?).  While the actual code for
this limited system may not be practically useful, it is of great
pedagogical value.

In the meantime, there are in fact some "de facto" standards in common
use for metaobjects.  They are by no means complete, but do offer some
degree of stabililty.  Explicitly, I refer to a mail message sent out
just about a year ago to the X3J13 email list detailing the three or four
dozen "metaobject protocol" functions and classes that Lucid and Symbolics
were agreeing to support.  Dave Moon sent the message, and it represented
some behind the scenes work between him, myself, and Scott Cyphers at
Symbolics (Dave may have contacted other vendors, but I'm not directly
aware of what their responses were.)  Virtually all of the functions and
features were drawn from previous versions of "Chapter 3" drafts, and
represent merely an "introspective" set (i.e., generic accessor-like
functions to fetch components of the major metaobject classes -- CLASSes,
GENERIC-FUNCTIONs,  METHODs, and SLOT-DEFINITION's)

Given all this background, I would hope that one could sift the metaobject
wheat from the chaff; that one could resist the attempts by the hucksters
of "Fly-by-Night Lisp, Inc" to sell you on their ONE TRUE (Relig... oops,
I mean) Metaobject Protocol; and that we all would go a little easier on
the likes of Symbolics.


-- JonL --