Bools reloaded
xs0
xs0 at xs0.com
Fri Mar 3 05:48:19 PST 2006
Don Clugston wrote:
> Tom wrote:
>> In article <du9cnl$2h9j$3 at digitaldaemon.com>, Bruno Medeiros says...
>>> Don Clugston wrote:
>>>> Tom wrote:
>>>>> In article <du71jc$1e9h$1 at digitaldaemon.com>, Bruno Medeiros says...
>>>>>> Walter Bright wrote:
>>>>>>> "Tom" <Tom_member at pathlink.com> wrote in message
>>>>>>> news:du049t$2uv2$1 at digitaldaemon.com...
>>>>>>>> Yes, PLEASE, WHY?? Just ONE argument against pure bools, only
>>>>>>>> one and I shut my
>>>>>>>> mouth forever!
>>>>>>> One should be very careful about stepping away from C's implicit
>>>>>>> promotion rules for a language that aims to be a successor to C.
>>>>>>> C absolutely *buried* Pascal.
>>>>>>>
>>>>>> Uuh, I'm not sure what Tom meant by "pure bools", nor I'm sure
>>>>>> what you meant by "C's implicit promotion rules" (as C doesn't
>>>>>> even have a bool). But ok, nevermind, let's pause for a moment,
>>>>>> and get our facts straight.
>>>>>>
>>>>>> What exactly is it in bools that you Walter, want and not want?
>>>>>> I already know that the ability to write 'while(1)' as the same as
>>>>>> 'while(true)' is one of them, but, anything more?
>>>>>> Is the behaviour of having an "implicit promotion" something you
>>>>>> want too?
>>>>>> If so, promotion from where, from int to bool, or from bool to int?
>>>>>> Do you want or not want bool numeric operations to be an error
>>>>>> (like boolA / boolB*2) ?
>>>>> You should read the latest posts about this stuff (the most with
>>>>> subject "Re:
>>>>> DMD 0.148 release"). It's all said there. By "pure bools" I mean
>>>>> the *purist
>>>>> kind* of boolean type. A boolean type that abstracts us from the
>>>>> implementation.
>>>> Sorry, that's still not clear.
>>>> Bruno is right, terms like "pure bools" or "purist bools" are vague,
>>>> you can't expect everyone to know what you mean.
>>
>> [snip]
>>
>>> Derek made a post some time ago with one such definition
>>> (news://news.digitalmars.com:119/14shfnb64x5o2.17cec6fac7wnu.dlg@40tude.net).
>>>
>>
>> And that is exactly what I meant when I said that you should read the
>> latest
>> posts on the stuff :)
>
> And if you read that post, you will find that Derek said:
>
> ** It can be explicitly cast to an integer such that false is 0, and
> true is 1.
>
> whereas Kyle said:
>
> integer operations are illegal, and it cant be cast to anything.
>
> So there are at least four types of bool being discussed. Probably more.
> And at least two can be called "pure bool".
> (a) the existing bool
> (b) Bruno and I are in here somewhere, and are not necessarily the same.
> (c) Derek
> (d) Kyle
>
> Right now, (a) and (c) are the only ones which are clearly defined.
Hmm, how about an expansion of (d):
1) still allow implicit casts to bool from any type, as in
- value != 0
- obj_ref !is null
- pointer !is null
- array.ptr !is null
- !struct.opEquals(0) // does this work now?
2) forbid casts from bool to anything else (even explicit; besides
"foo?1:0" is shorter and more obvious than "cast(int)foo")
3) when an expression involves a bool operand, all other operands get
converted to bool
4) forbid all operators on bools, except ==, !=, &&, ||, &, |, and !. (&
and | don't short-circuit evaluation, but are otherwise equivalent to &&
and ||).
Then, the purists should be satisfied, because the only operations
allowed are the logic ones, and true and false don't have a numeric
representation.
There is a true/false representation of everything else, though,
allowing all the short forms we like, like
while(1)
if (foo && foo.bar())
if (refA || refB)
xs0
More information about the Digitalmars-d
mailing list