On Sunday, December 11, 2011 07:31:28 kenji hara wrote: > Treating whole constant arrays as ranges by automatically shedding the > top-level const is good. > But realizing it by language semantic change is definitely bad.It > breaks IFTI rule, and adding special case will make difficult to learn > language. > > Instead of language change, we can add specializations that receive > non-ranges and convert them to ranges by removing top-level const. > I believe that it is Phobos issue and is never the issue of language.
Making the fix in Phobos is a pain in that you have to duplicate functions all over the place (though they'd just be wrappers, so you wouldn't have to duplicate their implementations). And everyone who defines their own range- based functions have to do the same thing. The question is whether we actually lose anything by making it so that so that IFTI won't give you a fully immutable or const array. And I don't see anything that you'd lose or how it could break any code. Sure, it then becomes possible to alter the array within the function where it wasn't before, but if it couldn't before, making it possible now won't break anything, since the function would have to be changed to even try. And for new functions, if they _really_ want the array to be const or immutable, they can assign it to a new array locally. I don't see how any expressiveness is really lost here or that anything would be broken. So, while this _does_ change the language's semantics, it seems to me that it just changes them for the better, not worse. Making this sort of change for static arrays _would_ be a problem, but I don't see how it's an issue for dynamic arrays. - Jonathan M Davis