Why is this not a warning?

tsbockman via Digitalmars-d digitalmars-d at puremagic.com
Thu Mar 17 04:15:40 PDT 2016


On Thursday, 17 March 2016 at 09:59:41 UTC, Dominikus Dittes 
Scherkl wrote:
> Or you can use an improved opCmp implementation in the 
> compiler, that only add additional runtime cost, if someone is 
> stupid enough to compare signed with unsigned values - but 
> yield the correct result:

I should also point out that, while it would have been eminently 
sensible for D to just implement signed/unsigned comparison 
correctly in the first place - fixing this now would be a silent 
breaking change.

I'm fairly confident that it would cause real-world problems, as 
I myself can recall trying to write code that intentionally 
leveraged the current bizarre behavior to eke out a little more 
speed, in the past.

Such code could be trivially fixed with the addition of a 
`cast(uint)` or the like in the right place, BUT only if someone 
actually remembered that it needed to be fixed: neither the 
compiler, nor dfix could automatically detect the rare code that 
deliberately depends on the current behavior.

So, I think Walter and Andrei made the right call by saying to 
make it a warning. Maybe later though, after a *long* deprecation 
period, we could fix it to check for negative values like it 
should.


More information about the Digitalmars-d mailing list