Paralysis of analysis

Dmitry Olshansky dmitry.olsh at gmail.com
Wed Dec 15 12:19:34 PST 2010


On 15.12.2010 22:52, Steven Schveighoffer wrote:
> 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.

Good to know.
>
> 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.
>
Right, this is very important! I just checked, and luckily I did this 
only with plain data structs.

> -Steve


-- 
Dmitry Olshansky



More information about the Digitalmars-d mailing list