On Saturday, 27 April 2013 at 20:31:15 UTC, Mehrdad wrote:
The problem is 'bool' has *NOTHING* in common with integers!

- Can't use + - * / << >> on bool's

Because currently D views booleans as a 1 bit int, you can do seemingly nonsensical things with the bool type

bool b = false + true; // OK
bool b = true * true; // OK
bool b = true / true; // OK
bool b = true + true; // compile error because 2 does not fit into 1 bit.

Even if you accept the view that bool is a 1 bit int, this conditional makes no sense at all

int x = -123456;
if (x) then
{
   // evaluates to true, but why???
}

if (x == true) then
{
// false because x != true(1), even though previously it was true
}

If bools are 1 bit ints, then why do we have 'true' and 'false' as keywords? Those keywords only serve to confuse the programmer into thinking that the bool type is actually a real boolean type.

The worse thing about this situation is the inconsistencies. It would not be nearly as bad if bool really was a 1 bit int type, instead it sometimes behaves like an int and sometimes it behaves like a boolean. Why name name the type "bool" instead of "bit"? Why have true and false keywords?

What I gather from the state of affairs, is an attempt to create the illusion of a boolean while retaining all of the properties of a 1 bit int type, with the notable exception of the weird conditional that evaluates an integer to true if it is not 0.

--rt

Reply via email to