Hi Gregor: I like to use the picture below to describe the various artifacts which float around when you work with Demeter. I think it gives a more useful picture than an object - meta-object distinction alone. Whether I consider an object a meta object is context dependent. If I have a class dictionary for COOL and I translate COOL objects into weaver instructions, I consider COOL objects regular objects. If I have the Java program produced by the weaver I consider COOL objects meta-objects and it is better to refer only to the COOL aspect description. -- Karl PS. See OOPSLA 97 paper by Lorenz. C B O C B L T O B L T O L P T P C: classes O: objects T: text (descriptions) B: level 1 (descriptions, objects, meta classes) L: level 2 (descriptions, objects, base classes) P: level 3 (descriptions, objects) T is a self-describing class dictionary B O is an object representing T B B C is the set of classes needed to describe class dictionaries B T is a class dictionary for an ASL (application specific language) L T is a description of an application specific object P Our Example: class ClassDef is in C B class Position is in C L a Position-object is in O P class Coordinator is in C L a coordinator object is in O P a coordinator description is in T P From gregor@parc.xerox.com Thu Nov 13 15:35:33 1997 From: Gregor Kiczales To: lieber@ccs.neu.edu CC: lieber@ccs.neu.edu, mira@ccs.neu.edu, dem@ccs.neu.edu, lopes@parc.xerox.com Subject: Re: Be careful what we call an object From: Karl Lieberherr Date: Thu, 13 Nov 1997 08:56:32 PST I agree with your point of view except that in my world descriptions and objects are tightly linked. Whenever I see a description, I see an underlying class dictionary and an object. Whether those objects are relevant at run-time, I consider an implementation detail, which matches what you said. Well let me backtrack a little on my uninteresting comment. The idea that whenever you see a description of a program element you see an object is interesting. It's what AMOP was all about -- that you could represent programs using OOP, and that if you used the idea of frameworks when doing that you could get powerfully open languages. But, as Mira points out, its very important to say metaobject when you refer to those kind of objects, to distinguish them from (normal or base-level) objects. And whether a metaobject is visible at runtime or not is not a detail as much as it is not crucial -- unless you document your MOP to say it is available. What is crucial is that the space I earlier identified as being intentionally blank doesn't have objects in it. I think if you stick to saying metaobject when that's what you mean then we'll probably all understand each other. Gregor I think we can talk about these levels even more clearly using the the metaobject/metaclass terminology. So, the picture I would draw is: the metaclass the metaclass named class named coordinator | | | | the metaobject for the metaobject for the class named position the coordinator | | | | a particular / this space \ position p1 < intentionally > \ left blank / The key point being that there isn't really a reified object that sits in the intentionally blank space. From gregor@parc.xerox.com Mon Nov 17 11:28:05 1997 Received: from alpha.xerox.com (alpha.Xerox.COM [13.1.64.93]) by amber.ccs.neu.edu (8.8.6/8.7.3) with SMTP id LAA02399; Mon, 17 Nov 1997 11:27:54 -0500 (EST) Received: from calvin.parc.xerox.com ([13.2.16.66]) by alpha.xerox.com with SMTP id <62374(5)>; Mon, 17 Nov 1997 08:25:54 PST Received: by calvin.parc.xerox.com id <86852>; Mon, 17 Nov 1997 08:17:08 PST Sender: Gregor Kiczales From: Gregor Kiczales To: lieber@ccs.neu.edu CC: lopes@parc.xerox.com, dem@ccs.neu.edu In-reply-to: <199711141744.MAA01566@stockberg.ccs.neu.edu> (message from Karl Lieberherr on Fri, 14 Nov 1997 09:44:29 PST) Subject: Re: meta objects Line-Fold: NO Message-Id: <97Nov17.081708pst."86852"@calvin.parc.xerox.com> Date: Mon, 17 Nov 1997 08:17:08 PST Status: R Clearly the term "meta" is relative. But I've found that it works in practice because one so rarely needs to deal with meta-meta-objects. So, one gets by with just the three levels: objects, metaobjects (including classes) and metaclasses. If I understand your picture I agree it captures additional distinctions, but I'm not sure when I need them.