dcollections 1.0 and 2.0a beta released

Steven Schveighoffer schveiguy at yahoo.com
Mon May 24 14:00:31 PDT 2010


On Mon, 24 May 2010 16:07:22 -0400, Andrei Alexandrescu  
<SeeWebsiteForEmail at erdani.org> wrote:

> On 05/24/2010 01:49 PM, Steven Schveighoffer wrote:
>> On Mon, 24 May 2010 12:27:10 -0400, Andrei Alexandrescu
>> <SeeWebsiteForEmail at erdani.org> wrote:
>>>> A pointer to the end element would be required for both appending and
>>>> back().
>>>
>>> This further erodes my confidence. Size needs to be maintained _and_ a
>>> pointer to the last element must be maintained. For many uses, all of
>>> this stuff is unnecessary overhead.
>>
>> You make it sound like incrementing a counter and changing a pointer are
>> incredibly slow operations :)
>
> They are. Ask Walter for a good example.

Actually, I realize that pointing to the end node isn't good enough,  
because once you remove that node, there is no way to get to the previous  
node without traversing the list again.

So slist cannot implement the List interface, you were right.

>> The overhead of storage is minimal
>> compared to the elements of the list, which do not contain said  
>> overhead.
>
> I'm talking containers of lists here.

I was more talking about the ratio of elements to lists.  For example, the  
Hash implementation uses the same link list nodes as elements in its  
table, and generally a hash has very few elements per list, so overhead on  
the list head would be too much.  On top of that, a LinkList has its own  
allocator, meaning each one consumes a large chunk of data assuming you  
will be adding lots of elements to it.

So maybe we need to refine the implementation building blocks that back  
the dcollections classes so they are useable in special situations where  
performance is critical.  It actually would be pretty trivial to define  
SLink as a specialization of dcollections' Link struct, and that would  
essentially give you a lot of functionality in terms of your ideal list  
type.

>> Which may be acceptable to you if you
>> want the bleeding fastest speed available. There will always be tailored
>> code crafted to be as fast as possible for some specific design and
>> dcollections and your slist just won't fit the bill.
>
> Except that the set is considerably smaller for a well-designed slist.

The set of problems that an slist solves is also considerably smaller.   
Having that backwards capability enables more algorithms.

-Steve


More information about the Digitalmars-d-announce mailing list