D's greatest mistakes

Andrei Alexandrescu SeeWebsiteForEmail at erdani.org
Tue Nov 30 07:36:53 PST 2010


On 11/29/10 7:52 PM, Michel Fortin wrote:
> On 2010-11-29 14:03:27 -0500, Andrei Alexandrescu
> <SeeWebsiteForEmail at erdani.org> said:
>
>>> For instance, here's a tricky question: should Unqual!(const C) give you
>>> a const(C), a Rebindable!(const C), or simply C?
>>
>> C.
>>
>>> Now, what should
>>> const(Unqual!(immutable C)) give you?
>>
>> const(C).
>
> As I thought.
>
> Now consider this generic code that uses Unqual:
>
> T[] giveMeASortedArray(alias Predicate, T)(T[] t) {
> // creating new array of the same length but with assignable elements
> auto copy = new Unqual!(typeof(t[0]))[t.length];
>
> // using a loop because copy[] = t[] doesn't enforce const properly!
> foreach (index, value; t)
> copy[index] = value;
>
> // sorting the copy
> sort!(Predicate)(copy);
> return copy;
> }
>
> The above algorithm will work for types like const(int*), but it breaks
> if T is const(C) and C is a class. So it seems we'll need a special
> cases for generic algorithms to work for classes. That's what I meant
> when I say Rebindable is a fragile solution. It works in most cases, but
> it breaks in some others, mostly when you want to be generic.
>
> So here's the challenge for you Andrei:
[snip]

I agree that the problem is difficult but disagree with the angle. This 
is not the challenge, and it is not only mine to take. To the extent 
we're interested in making D a successful language, we're all on the 
same boat, so the challenge belongs to us all.

Adding a new type constructor to the language or generally a new feature 
is always possible, but has a high cost. Half of the community throws 
their hand in the air with each new feature, and the other half throws 
them in the air for each feature that could have been. The key is to 
navigate such that as many good designs are expressible as easily as 
possible.

The real challenge is to solve the problem within the global set of 
constraints we have, not to prove that a language feature would solve 
it. I know a language feature would take care of the issue, the same way 
money would take care of buying a nice house. The challenge is to have a 
nice house when money _is_ limited.


Andrei


More information about the Digitalmars-d mailing list