Jonathan M Davis wrote:
> The solution is to fix template instantiation so that it's smarter when
> dealing with static arrays and const or immutable arrays:
> http://d.puremagic.com/issues/show_bug.cgi?id=6148
>

Unless I am missing something essential, supporting this would turn the 
complexity
of failing template function instantiations to Omega((time for 
matching)*2^(number
of const/immutable arrays in the input)). I don't think this is too great.

> It's a language issue, not a design issue. Making ranges function like slists
> (with head and tail or car and cdr) would be almost certainly be too
> inefficient (particularly for ranges where save is not super cheap, though
> it's at least supposed to be fairly cheap).

That Eg. join cannot take an immutable(char[]) is certainly a design issue.
I think what you find to be a language issue are limitations inherent to 
templates
that are very hard (NP hard in the general case) to overcome.

> Immutability might be nice, but it
> does have its costs, and in this case, D's templates aren't currenly smart
> enough to use immutable(E)[] instead of immutable(E[]).

I claim they cannot get that smart. If I'm right, this turns it into a complete
design issue.

> And it's not like
> immutable ranges are going to work with non-array ranges anyway, so it's
> arguably a good idea to just expect immutable and const ranges to not work
> anyway.
>
> - Jonathan M Davis

immutable ranges don't exist in D. immutable arrays do. The issue is that many
Phobos functions can only take ranges, what excludes immutable arrays. That is 
bad
as immutable arrays share many properties with ranges and could be used as input
to similar algorithms.

This does not have top priority (at least for me), as it is just a mild 
annoyance
that can be worked around. But it needs some thinking.

Cheers,
-Timon

Reply via email to