Ok, I've come to the conclusion that we're never going to reach a consensus, so I'll lay a card on the table.  I never really liked the change that makes implicit narrowing conversions illegal (or most of the other increased strictness that D has acquired recently) in the first place.  This and many other things used to be a warning and to me that's exactly what they should be.  Warnings are for things that are unambiguous, have a decent probability of not being bugs, but also have a decent probability of being bugs.  Errors are for things that are ambiguous or are almost certainly bugs, or for when you explicitly asked for extra checking, for example by using const.  You might want the compiler to complain about narrowing conversions when you're trying to clean up the code, hunt for latent bugs that would only show up in production, and get to the "make it right" stage, or trying to figure out why it doesn't work.  Most narrowing conversions, though, are innocent and it's really annoying for the compiler to act like they need to be addressed right now, when you're still in the "make it work" stage or just writing some quick and dirty piece of code that only needs to run once.

On 2/17/2011 8:53 PM, Jonathan M Davis wrote:

I concur. If you use auto and/or size_t, it's rarely a problem that size_t 
changes its size based on the architecture. Using int or uint for indices is 
generally wrong. If you really need it to be an int or uint, then a cast should 
be used. And if you're really running into this problem all over the place, 
because you frequently save array indices (which I would posit is _not_ 
something which is normally done very often, let alone in a manner that it would 
be a problem just to save them as size_t), then you can create ilength in your 
own code. But I really think that not only would ilength promote poor practices, 
but it would generally lead to less maintainable code, because it would be 
_really_ easy to mix up ilength and length.

And honestly, I would say the fact that someone is running into errors with 
array indices in 64-bit land, because they weren't using size_t is just showing 
that the code was faulty to begin with. They should have been using size_t. At 
least the compiler will now point it out to them.

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


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

Reply via email to