On Wednesday 18 August 2010 19:37:04 dsimcha wrote: > I've been hacking in Phobos and parallelfuture and I've come to the > conclusion that having typeof(c) in the expression foreach(c; string.init) > not be a dchar is simply ridiculous. I don't care how much existing code > gets broken, this needs to be fixed. Otherwise, all generic code will > have to deal with it as a special case. Most of it will probably overlook > this special case in practice, and the net result will be more broken code > than if we just bite the bullet and fix this now. Here are some examples > of the absurdities created by the current situation: > [snip] > If D is at all serious about generic programming, we simply can't require > this to be dealt with **everywhere** as a special case.
Considering that in all likelihood 99+% of the cases where someone is iterating over char, they really want dchar, I have no problem whatsoever with such a change. It may break existing code, but I'd expect that it's more likely to fix it. People could still iterate over char or wchar if they want to - they'd just have to specify the type. The one thing about it that bugs me is that it means that foreach acts differently with chars and wchars then it does with everything else, but really, that's a _lot_ less of an issue than the problems that you get with generic programming where you have to special case strings all over the place. As I understand it, Walter doesn't want to do this because it silently breaks D1 code. However, since odds are that that code should have been iterating over dchars in the first place, I really think that this change is worth making. In light of the costs to generic programming and the fact that programmers the world over are going to screw up when using foreach with strings when only a bare handful are actually going to want to iterate over chars or wchars, I'd say that making this change is worth it. Yes, it may break some existing code, but one, I'd expect that it would _fix_ more code than it breaks, and two, this will forever be a recurring bug in D programs if it doesn't get fixed. You _know_ that the average programmer is going to screw this up and that experienced ones will periodically forget to specify the type for foreach and get bittek by it, and the cost to generic programming is obviously very high if we leave it as is. So, I'd definitely vote to make it so that foreach over chars and wchars defaults to dchar. The pain that it will save is _far_ more than the pain that it will cost. - Jonathan M Davis