dcollections 1.0 and 2.0a beta released

Steven Schveighoffer schveiguy at yahoo.com
Mon May 24 09:41:27 PDT 2010


On Mon, 24 May 2010 12:06:18 -0400, Robert Jacques <sandford at jhu.edu>  
wrote:

> On Mon, 24 May 2010 08:06:29 -0400, Steven Schveighoffer  
> <schveiguy at yahoo.com> wrote:
>> On Thu, 20 May 2010 12:46:59 -0400, Robert Jacques <sandford at jhu.edu>  
>> wrote:
>>
>>> On Thu, 20 May 2010 06:34:42 -0400, Steven Schveighoffer  
>>> <schveiguy at yahoo.com> wrote:
> [snip]
>>>>
>>>> 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.
>>>
>>> This sounds like a failure of design. Why aren't you using ranges to  
>>> do this?
>>
>> Why are ranges necessarily better?  I'm using the container's opApply,  
>> which I'd probably still use even if there were no interfaces.  opApply  
>> allows much more possibilities in traversal than ranges which cannot  
>> use stack recursion without heap activity.
>
> Ranges are not necessarily better and may have some minor amount of  
> overhead over a well optimized opApply. Then again, the opposite may be  
> true. The point is that if the difference between opApply and a range is  
> more than trivial, you've probably had a failure of design occur.

The difference is trivial.  I support both ranges and opApply.  The main  
benefit from using opApply being only one function is compiled by the  
compiler.

>>>
>>>> Using interfaces is not as viral as you think.  My interfaces can be  
>>>> used in generic code, as long as the generic code uses functions in  
>>>> the interfaces.  If a library returns an interface, the author is  
>>>> saying "I don't want you using any functions outside this interface,"  
>>>> so why is that a bad thing?
>>>
>>> Well, needlessly duplicated functions for one. :) More importantly,  
>>> the example I gave was about third party libraries which I have no  
>>> control over. So this solution explicitly doesn't work. And even if  
>>> everyone used templates everywhere in order to be compatible with both  
>>> interfaces and classes, isn't that a viral effect of having both?
>>
>> If a 3rd party library uses interfaces, it's probably for good reason.   
>> They most likely want to remain binary compatible with other libs,  
>> and/or want to abstract the implementation of some custom container  
>> type.  If you don't like their requirements, don't use the library.
>>
>> -Steve
>
> No, if a 3rd party library _needs_ to use interfaces it's probably for a  
> good reason. The problem is, if they exist, people are going to use them  
> even if they don't need them. Which therein lies the problem.

And if 3rd party X _needs_ to use interfaces, and 3rd party Y _needs_ to  
use interfaces, and your code depends on X and Y, and interfaces aren't  
defined by dcollections, where are you then?  I don't think there's any  
way you can define a generic standard library such that people won't  
create bad designs, that's a lost cause.

I think part of the problem with all this is that interfaces aren't likely  
to be needed any time soon (D's dynamic lib support is almost  
non-existent), so I'm probably going to drop the interfaces for now in the  
interest of progress.

-Steve


More information about the Digitalmars-d-announce mailing list