dcollections 1.0 and 2.0a beta released
Andrei Alexandrescu
SeeWebsiteForEmail at erdani.org
Fri May 21 11:04:29 PDT 2010
On 05/20/2010 08:22 AM, Steven Schveighoffer wrote:
> Michel Fortin Wrote:
>
>> On 2010-05-20 06:34:42 -0400, Steven
>> Schveighoffer<schveiguy at yahoo.com> said:
>>
>>> I understand these points, but I'm already using interfaces to
>>> copy data between containers. I don't have to, I could have used
>>> generic code, but this way, only one function is instantiated to
>>> copy data from all the other containers. The problem with using
>>> generic code is that the compiler will needlessly duplicate
>>> functions that are identical.
>>
>> One question. Have you calculated the speed difference between
>> using an interface and using generic code? Surely going through all
>> those virtual calls slows things down a lot.
>>
>> I do like interfaces in principle, but I fear it'll make things
>> much slower when people implement things in term of interfaces.
>> That's why I'm not sure it's a good idea to offer container
>> interfaces in the standard library.
>
> It's not that much slower. You get a much higher speedup when things
> can be inlined than virtual vs. non-virtual.
>
> However, I should probably make all the functions in the concrete
> implementations final. I made several of them final, but I should do
> it across the board.
Yup. Even Java does that. I forgot whether it was a recanting of a
former stance (as was the case with synchronized) or things were like
that from the get-go.
> One thing I just thought of -- in dcollections, similar types can be
> compared to one another. For example, you can check to see if a
> HashSet is equal to a TreeSet. But that would not be possible
> without interfaces.
Of course it would be possible. You write a generic function that takes
two generic container and constrain the inputs such that at least one
has element lookup capability. (Complexity-oriented design for the win!)
Andrei
More information about the Digitalmars-d-announce
mailing list