On 10/27/2010 7:02 PM, Jonathan M Davis wrote:
On Wednesday, October 27, 2010 14:33:17 David Simcha wrote:
I agree 100% that startsWith needs to work with immutable(X[]).
Nonetheless, the proper way to address this is by fixing the language, not
by relying on expedient bugs.  I insisted on fixing this because history
has shown that if too many people start relying on behavior that is
clearly a bug but happens to be expedient, the bug becomes politically
unfixable no matter how wrong the behavior is.  Fixing the rest of Phobos
such that startsWith() and similar functions will work with immutable(X[])
without relying on Bug 3534 would have been a monumental task (I tried).

My proposal for dealing with this issue has always been that IFTI should
instantiate a function with an Unqual!(T) when passed a T, if and only if
the given T is implicitly convertible to Unqual!(T).  For example:

void foo(T)(T arg) {}

immutable str = "A family of foxes found food in the forest.";
foo(str);  // Equivalent to foo!(immutable(char)[])(str);

immutable num = 2;
foo(num);  // Equivalent to foo!(int)(num);

const myRetro = retro([1,2,3,4,5,6]);
foo(myRetro);  // const(Retro!(int[])) doesn't implicitly convert to
                // Unqual!(const(Retro!(int[]))).  No Unqual applied.
Well, this change is going to break a lot of code

You're right, but it had to be done eventually and holding off and doing it later would only break even more code.

  (and the fact that string
literals are immutable on Linux but not Windows sure isn't going to help with
code portability).

Since when are string literals not immutable on Windows? They definitely are in D2.

We really need to find a permanent solution for this problem
soon.

Right. I've been somewhat disappointed that my IFTI proposal has generated so little comment. IMHO it would solve a whole family of issues related to the interaction between generic code and const/immutable. These issues are so pervasive that std.math.pow() didn't even work with immutable numeric primitives until a few releases ago when I put in some kludges to make it work.

- Jonathan M Davis
_______________________________________________
dmd-beta mailing list
[email protected]
http://lists.puremagic.com/mailman/listinfo/dmd-beta


_______________________________________________
dmd-beta mailing list
[email protected]
http://lists.puremagic.com/mailman/listinfo/dmd-beta

Reply via email to