dcollections 1.0 and 2.0a beta released
Steven Schveighoffer
schveiguy at yahoo.com
Thu May 20 19:08:32 PDT 2010
Michel Fortin Wrote:
> On 2010-05-20 09:22:27 -0400, Steven Schveighoffer <schveiguy at yahoo.com> said:
>
> > 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.
>
> Yes, but that was part of the equation: a call to a template function
> can be inlined, not a virtual call (most of the time).
So if you want inlining, use the actual type, nothing is stopping you. Well, except the non-final functions, I have to fix that.
> > 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.
>
> I'm not sure of what you're saying here. Are you saying it can be done
> with an interface but not with a template type? Why can't this work:
Because comparing two objects for equality now calls this function:
bool opEquals(Object obj1, Object obj2)
Which is defined in object_.d in the runtime. No compile-time anything is allowed.
-Steve
More information about the Digitalmars-d-announce
mailing list