Aggregates & associations

Steven Schveighoffer schveiguy at yahoo.com
Thu Dec 20 06:52:37 PST 2007


"Sean Kelly" wrote
> Steven Schveighoffer wrote:
>> "Sean Kelly" wrote
>>> A long time ago Walter mentioned that the "scope" attribute may be 
>>> extended to indicate aggregation:
>>>
>>>     class Foo
>>>     {
>>>         Bar valA;
>>>         scope Baz val2;
>>>     }
>>>
>>> With the above, the size of Foo would be expanded to contain an instance 
>>> of Baz and val2 would be initialized to reference this memory, very much 
>>> like "scope" works in functions now.  But I didn't see any mention of 
>>> this in the D 2.0 writeup so the idea may have been either discarded or 
>>> forgotten.
>>
>> I believe this type of behavior is not necessary.  Whether a member is an 
>> aggregate or an association, it will be deleted when nothing references 
>> it anymore, which is when it should be deleted.  The only thing this 
>> proposed behavior can do is cause segfaults when something that still has 
>> a reference to a scoped member tries to use it.
>
> You're right that it's not necessary.  The GC is supposed to take care of 
> this for you.  But constructing complex aggregates can be quite expensive 
> in terms of GC use, as a separate allocation must be made for every 
> object.  This can also reduce locality of the objects are of different 
> sizes, which may affect performance by incurring cache misses. Now, it is 
> possible in D 2.0 to get the size of an object and reserve space for it 
> using a static array, but this requires the use of placement new, which 
> requires yet more fancy template code to bolt onto existing classes, etc. 
> So this is certainly possible, but far messier than in C++.  And it's 
> really a fairly common design requirement.

I didn't quite understand your original post, thanks for explaining it 
further.

-Steve 





More information about the Digitalmars-d mailing list