On Thursday, 20 November 2014 at 08:14:41 UTC, Walter Bright
wrote:
Computer math is not math math. It is its own beast, and if
you're going to write in a systems programming language it is
very important to learn how it works, or you'll be nothing but
frustrated.
Understanding how it works doesn't mean error prone practices
must be forced everywhere. It's not like D can't work with signed
types.
Rust made the same mistake and now a couple of times I've seen
bugs like these
being reported. Never seen them in Java or .Net though. I
wonder why...
D is meant to be easily used by C and C++ programmers. It
follows the same model of signed/unsigned arithmetic and
integral promotions. This is very, very deliberate. To change
this would be a disaster.
If unsigned types exist, it doesn't mean they must be forced
everywhere.
For example, in America we drive on the right. In Australia,
they drive on the left. When I visit Australia, I know this,
but when stepping out into the road I instinctively check my
left for cars, step into the road, and my foot gets run over by
a car coming from the right. I've had to be very careful as a
pedestrian there, as my intuition would get me killed.
Don't mess with systems programmers' intuitions. It'll cause
more problems than it solves.
Bad things can happen, but why make them more probable instead of
trying to make them less probable?