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.
Author: jonathan
Date: Sun Mar 4 02:19:10 2007
New Revision: 17322
Modified:
trunk/docs/pdds/draft/pdd15_objects.pod
. . .
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
. . .
?? Not "An object is a value . . ."?
-- Bob Rogers
http://rgrjr.dyndns.org/