On 11/20/14, 6:47 AM, Andrei Alexandrescu wrote:
On 11/20/14 12:18 AM, Don wrote:
On Wednesday, 19 November 2014 at 17:55:26 UTC, Andrei Alexandrescu
wrote:
On 11/19/14 6:04 AM, Don wrote:
Almost everybody seems to think that unsigned means positive. It does
not.

That's an exaggeration. With only a bit of care one can use D's
unsigned types for positive numbers. Please let's not reduce the
matter to black and white.

Andrei

Even in the responses in this thread indicate that about half of the
people here don't understand unsigned.

"unsigned" means "I want to use modulo 2^^n arithmetic". It does not
mean, "this is an integer which cannot be negative".

Using modulo 2^^n arithmetic is *weird*. If you are using uint/ulong to
represent a non-negative integer, you are using the incorrect type.

"With only a bit of care one can use D's unsigned types for positive
numbers."

I do not believe that that statement to be true. I believe that bugs
caused by unsigned calculations are subtle and require an extraordinary
level of diligence. I showed an example at DConf, that I had found in
production code.

It's particularly challenging in D because of the widespread use of
'auto':

auto x = foo();
auto y = bar();
auto z = baz();

if (x - y > z) { ... }


This might be a bug, if one of these functions returns an unsigned
type.  Good luck finding that. Note that if all functions return
unsigned, there isn't even any signed-unsigned mismatch.

I believe the correct statement, is "With only a bit of care one can use
D's unsigned types for positive numbers and believe that one's code is
correct, even though it contains subtle bugs."

Well I'm sorry but I quite disagree. -- Andrei


I don't think disagreeing without a reason (like the one Don gave above) is good.

You could show us the benefits of unsigned types over signed types (possibly considering that not every program in the world needs an array with 2^64 elements).

Reply via email to