Author: jonathan Date: Sun Mar 4 02:19:10 2007 New Revision: 17322 Modified: trunk/docs/pdds/draft/pdd15_objects.pod
Log: Describe new class and object layout for objects. We now push a lot into the class and make objects really lightweight, since you will usually instantiate many objects per class. Modified: trunk/docs/pdds/draft/pdd15_objects.pod ============================================================================== --- trunk/docs/pdds/draft/pdd15_objects.pod (original) +++ trunk/docs/pdds/draft/pdd15_objects.pod Sun Mar 4 02:19:10 2007 @@ -18,7 +18,7 @@ =head2 Object -An object is kind a variable that incorporates both data and behavior +An object is a variable that incorporates both data and behavior related to that data. =head2 Class @@ -194,12 +194,35 @@ An array PMC of the methods defined in the class or composed into the class - =item 6 -The class attribute hash. Keys are the attribute names and the values -are a hash of attribute characteristics, including name, type, and the -class they're associated with. +The v-table for the class. The order of dispatch used when building the +v-table should follow the MRO, and it should be invalidated when the MRO +changes. Essentially, it is a cache. + +=item 7 + +The class attribute metadata hash. Keys are the attribute names and the +values are a hash of attribute characteristics, including name, type, the +class they're associated with and any flags (for example, private). Note +that this only stores metadata for the attributes defined in this class, +and not for attributes inherited from its parents. + +=item 8 + +The full attribute lookup table. This includes all attributes defined in +the current class and every other class that it inherits from either +directly or indirectly. The table is keyed on the name of the class the +attribute is defined in along with the attribute name. The value is an +index into the per-object attribute store. + +=item 9 + +The attribute cache. While the attribute lookup table defines every +attribute, whether it is visible or not with the current MRO, the cache +maps the names of the visible attributes directly to an index in the per- +object attribute store. That saves a more costly lookup in the full +attribute lookup table. =back @@ -209,13 +232,11 @@ The inheritance rules for a particular HLL will determine which child class attributes override which parent class attributes. -We may also add a cache to the class object: a hash that contains all -child and parent attribute characteristcs. Whether this is useful -largely depends on how slow it is to scan through the list of parent -classes, and how dynamic we want the system to be. (If a parent class -changes its set of attributes, should that change appear in later -instantiations of objects from child classes? Probably, in which case -caching parent attributes is an obstacle.) +(If a parent class changes its set of attributes, should that change +appear in later instantiations of objects from child classes? If so, all +of these classes would need to be re-constructed as a result of the +change; note that any already instantiated objects would refer to the old +class.) Class PMCs also have the "I am a class" flag set on them. @@ -311,20 +332,15 @@ =item 1 -The class name - -=item 2 - -The object attribute hash. Keys are the attribute names and the values -are the attribute values. (The "hash" may be implemented as a typed -structure following the CStruct proposal.) +The object attribute store. This is simply an array of PMCs that +provide the values for the attributes. It may be a resizable PMC array +to provide lazy growth rather than allocating all needed memory for +all attributes. We find the indexes into this array from the attribute +cache or lookup table in the class. =back -A list of the object's attributes is accessible by extracting the keys -from the object attribute hash. This direct introspetive capability may -not be directly exposed in the HLLs (preserving the boundaries of an -opaque object). +A list of the object's attributes is accessible from the class. Note that Object PMCs have the "I am an object" flag set on them.