Paralysis of analysis

Steven Schveighoffer schveiguy at yahoo.com
Wed Dec 15 11:52:37 PST 2010


On Wed, 15 Dec 2010 14:18:20 -0500, Dmitry Olshansky  
<dmitry.olsh at gmail.com> wrote:

> On 15.12.2010 3:50, Jonathan M Davis wrote:
>> On Tuesday, December 14, 2010 16:35:34 Craig Black wrote:
>>>> What say you?
>>> I feel like the odd man out here since my perspective is so  
>>> different.  I
>>> use custom container classes even in C++, partly because I can usually  
>>> get
>>> better performance that way, and because I can customize the the  
>>> container
>>> however I like.  So I will probably be doing my own containers if/when  
>>> I
>>> use D.
>>>
>>> Beyond that, my own personal preferences seem so different that I  
>>> hesitate
>>> to mention them.  I use dynamic arrays by far the most out of all  
>>> container
>>> classes.  I use them so much that I cringe at the thought of allocating
>>> them on the GC heap.  My code is very high performance and I would  
>>> like to
>>> keep it that way.
>>>
>>> Also, my usage of arrays is such that most of them are empty, so it is
>>> important to me that the empty arrays are stored efficiently.  Using my
>>> custom container class, an empty array does not require a heap  
>>> allocation,
>>> and only requires a single pointer to be allocated.
>>>
>>> Not sure if these requirements are important to anyone else, but I  
>>> don't
>>> mind making my own custom containers if I need to.
>> Dynamic arrays are already on the GC heap...
>>
>> - Jonathan M Davis
> Hm,
> ((T*)malloc(1024*T.sizeof))[0..size];
> works. Just needs careful initialization of each field, since they are  
> filled with trash ...
> And you can even do slicing. Just don't append to them and keep track of  
> the initial reference ;)

You can append them.  The append code will recognize that it's not a GC  
block and reallocate.

What you need to do more importantly is depending on the type of T, you  
may need to register the block as a root in the GC.  Otherwise, if T  
contains GC references, those could be collected prematurely.

-Steve


More information about the Digitalmars-d mailing list