digitalmars.D - Bool!
- Derek Parnell (16/16) Aug 22 2005 Damn stupid bool strikes again.
- AJG (7/18) Aug 22 2005 I second this opinion.
- bobef (6/22) Aug 22 2005 I don't see nothing wrong with that. -1 is true. It would be insane if y...
- Sean Kelly (7/12) Aug 22 2005 One could argue that the C convention that D follows is convenient but p...
- Hasan Aljudy (13/32) Aug 22 2005 The problem with implicit conversion between int and bool is that bool
- Derek Parnell (29/38) Aug 22 2005 I believe you ;-) Though I think you meant to say "I don't see _anythin...
- James Dunne (5/43) Aug 22 2005 Derek, man, where can I pitch up my "I'm a pedantic bastard too" tent?! ...
- bobef (5/14) Aug 23 2005 Yes, I see something but it is not wrong. ;] Maybe I meant to say "I see...
- Ben Hinkle (7/10) Aug 22 2005 I think the design of util.str.ends is just as much at fault as int/bit
- Derek Parnell (30/43) Aug 22 2005 LOL... I wrote 'ends()'!
Damn stupid bool strikes again. What wrong with this line? ... if (util.str.ends(pWord, "'s") == true) return; Nothing, except that ends() return an integer (-1) if it fails, and the compiler doesn't bother to mention that it's implicitly converting the bool (true) to an integer. Not even if -w is operating. However, if it had bothered to notice I was trying to compare a bool with an integer, and that might be a dumb idea, I would have been a lot happier. This hidden bug wasted my time unnecessarily. Looks like I have to implement a proper boolean type in my code if I want the compiler to type-check it for me. More waste! -- Derek (skype: derek.j.parnell) Melbourne, Australia 22/08/2005 7:49:21 PM
Aug 22 2005
In article <4hvh1d33umf2.1jk7qcivm6qvv.dlg 40tude.net>, Derek Parnell says...Damn stupid bool strikes again. What wrong with this line? ... if (util.str.ends(pWord, "'s") == true) return; Nothing, except that ends() return an integer (-1) if it fails, and the compiler doesn't bother to mention that it's implicitly converting the bool (true) to an integer. Not even if -w is operating. However, if it had bothered to notice I was trying to compare a bool with an integer, and that might be a dumb idea, I would have been a lot happier. This hidden bug wasted my time unnecessarily. Looks like I have to implement a proper boolean type in my code if I want the compiler to type-check it for me. More waste!I second this opinion. Wouldn't it be possible for the compiler to implement bool as an int _internally_ (for "speed") but nevertheless keep it as a separate type for the programmer's benefit? Thanks, --AJG.
Aug 22 2005
I don't see nothing wrong with that. -1 is true. It would be insane if you get warning everytime you convert int to bool implicitly... Just think how often something like 'if(foo())' is used where foo is returning int... You know ends() returns -1 on error so just type it as if (util.str.ends(pWord, "'s") >= 0) return; In article <4hvh1d33umf2.1jk7qcivm6qvv.dlg 40tude.net>, Derek Parnell says...Damn stupid bool strikes again. What wrong with this line? ... if (util.str.ends(pWord, "'s") == true) return; Nothing, except that ends() return an integer (-1) if it fails, and the compiler doesn't bother to mention that it's implicitly converting the bool (true) to an integer. Not even if -w is operating. However, if it had bothered to notice I was trying to compare a bool with an integer, and that might be a dumb idea, I would have been a lot happier. This hidden bug wasted my time unnecessarily. Looks like I have to implement a proper boolean type in my code if I want the compiler to type-check it for me. More waste! -- Derek (skype: derek.j.parnell) Melbourne, Australia 22/08/2005 7:49:21 PM
Aug 22 2005
In article <ded68i$js3$1 digitaldaemon.com>, bobef says...I don't see nothing wrong with that. -1 is true. It would be insane if you get warning everytime you convert int to bool implicitly... Just think how often something like 'if(foo())' is used where foo is returning int... You know ends() returns -1 on error so just type it as if (util.str.ends(pWord, "'s") >= 0) return;One could argue that the C convention that D follows is convenient but prone to bugs and misinterpretation. Strictly typed bools are quite useful, though they do result in code being more verbose. Which you prefer is probably a matter of experience more than anything else. Some careful programmers tend to avoid implicit bool conversions however, as they aren't particularly self-documenting. Sean
Aug 22 2005
Sean Kelly wrote:In article <ded68i$js3$1 digitaldaemon.com>, bobef says...The problem with implicit conversion between int and bool is that bool (conceptually) is not a subset of (int), or how do I say it? bool to int is not like what float is to double, "bit" is. bool (conceptually) has nothing to do with int what-so-ever, I think asking for a warning is very reasonable. #if (util.str.ends(pWord, "'s") == true) return; This code doesn't even put an "int" expression inside an if statement. It explicitly compares an int to a bool. Unfourtunately, the compiler doesn't think so! bool doesn't even exist in D, it's just an alias for "bit". So the above statement is simply comparing an int to a bit, which is quite resonable in the compiler's opinion.I don't see nothing wrong with that. -1 is true. It would be insane if you get warning everytime you convert int to bool implicitly... Just think how often something like 'if(foo())' is used where foo is returning int... You know ends() returns -1 on error so just type it as if (util.str.ends(pWord, "'s") >= 0) return;One could argue that the C convention that D follows is convenient but prone to bugs and misinterpretation. Strictly typed bools are quite useful, though they do result in code being more verbose. Which you prefer is probably a matter of experience more than anything else. Some careful programmers tend to avoid implicit bool conversions however, as they aren't particularly self-documenting. Sean
Aug 22 2005
On Mon, 22 Aug 2005 18:41:22 +0000 (UTC), bobef wrote:I don't see nothing wrong with that.I believe you ;-) Though I think you meant to say "I don't see _anything_ wrong with that." ... not seeing nothing implies that you see something.-1 is true.Well, actually it turns out that -1 is really the integer between -2 and zero. In fact, -1 is really many, many things but one of those is *not* the opposite of 'false'. However, I have heard that some programming language designers had decided to use -1 to represent truth, and others have used 1, and still others had decided that any non-zero value can be used to represent truth. But in each of those cases it was only a representation and nothing more.It would be insane if you get warning everytime you convert int to bool implicitly...Funny you say that, I do get people saying I'm a bit insane ;-) Well actually its more like "Lighten up Derek, you're such a pedantic bastard.". But what can I do? - it's my style. I favour clear expression over ambiguity and sloppy coding. That's not to say I don't do sloppy code, but I'm sure as anything that I don't like it.Just think how often something like 'if(foo())' is used where foo is returning int...Yes ... scary isn't it? It make you wonder why so many programmers seem to love debugging. Ok, as a concession to some poor historical decisions that would be too costly to correct now, I won't complain (too much) against the idiom "if (EXPRESSION) ...". But I will ask that explicit comparisons of bools with non-bools be one of the things that the compiler can warn us about (-w switch).You know ends() returns -1 on error so just type it as if (util.str.ends(pWord, "'s") >= 0) return;Yes, but I forgot and made a coding mistake that the compiler could have, theoretically, told me about but didn't. It tries so hard to tell me about other coding faux pas but not this type. Weird inconsistency. -- Derek Parnell Melbourne, Australia 23/08/2005 6:55:16 AM
Aug 22 2005
In article <pweyyzo6qg9v.p5tw00b64723$.dlg 40tude.net>, Derek Parnell says...On Mon, 22 Aug 2005 18:41:22 +0000 (UTC), bobef wrote:Derek, man, where can I pitch up my "I'm a pedantic bastard too" tent?! Amen. (posting me too like some braindead AOLer) Regards, James DunneI don't see nothing wrong with that.I believe you ;-) Though I think you meant to say "I don't see _anything_ wrong with that." ... not seeing nothing implies that you see something.-1 is true.Well, actually it turns out that -1 is really the integer between -2 and zero. In fact, -1 is really many, many things but one of those is *not* the opposite of 'false'. However, I have heard that some programming language designers had decided to use -1 to represent truth, and others have used 1, and still others had decided that any non-zero value can be used to represent truth. But in each of those cases it was only a representation and nothing more.It would be insane if you get warning everytime you convert int to bool implicitly...Funny you say that, I do get people saying I'm a bit insane ;-) Well actually its more like "Lighten up Derek, you're such a pedantic bastard.". But what can I do? - it's my style. I favour clear expression over ambiguity and sloppy coding. That's not to say I don't do sloppy code, but I'm sure as anything that I don't like it.Just think how often something like 'if(foo())' is used where foo is returning int...Yes ... scary isn't it? It make you wonder why so many programmers seem to love debugging. Ok, as a concession to some poor historical decisions that would be too costly to correct now, I won't complain (too much) against the idiom "if (EXPRESSION) ...". But I will ask that explicit comparisons of bools with non-bools be one of the things that the compiler can warn us about (-w switch).You know ends() returns -1 on error so just type it as if (util.str.ends(pWord, "'s") >= 0) return;Yes, but I forgot and made a coding mistake that the compiler could have, theoretically, told me about but didn't. It tries so hard to tell me about other coding faux pas but not this type. Weird inconsistency. -- Derek Parnell Melbourne, Australia 23/08/2005 6:55:16 AM
Aug 22 2005
In article <pweyyzo6qg9v.p5tw00b64723$.dlg 40tude.net>, Derek Parnell says...On Mon, 22 Aug 2005 18:41:22 +0000 (UTC), bobef wrote:Yes, I see something but it is not wrong. ;] Maybe I meant to say "I see nothing wrong with that". Anyway English is not my native language...I don't see nothing wrong with that.I believe you ;-) Though I think you meant to say "I don't see _anything_ wrong with that." ... not seeing nothing implies that you see something.Ok, as a concession to some poor historical decisions that would be too costly to correct now, I won't complain (too much) against the idiom "if (EXPRESSION) ...". But I will ask that explicit comparisons of bools with non-bools be one of the things that the compiler can warn us about (-w switch).Sounds good to me. if(EXPRESSION==true) -> warning if(EXPRESSION) -> no warning...
Aug 23 2005
"Derek Parnell" <derek psych.ward> wrote in message news:4hvh1d33umf2.1jk7qcivm6qvv.dlg 40tude.net...Damn stupid bool strikes again. What wrong with this line? ... if (util.str.ends(pWord, "'s") == true) return;I think the design of util.str.ends is just as much at fault as int/bit conversions. I would agree with you that ends should return true/false rather than an index. I say that since the index can be trivially computed from the lengths involved and since the name "ends" doesn't give any clue that it is returning an index. I think you were set up :-)
Aug 22 2005
On Mon, 22 Aug 2005 19:14:32 -0400, Ben Hinkle wrote:"Derek Parnell" <derek psych.ward> wrote in message news:4hvh1d33umf2.1jk7qcivm6qvv.dlg 40tude.net...LOL... I wrote 'ends()'! You may be right about its design. It returns -1 if the first string does not end with the second string, otherwise it returns the length of the first string up to the ending second string. <code> //------------------------------------------------------- int ends(dchar[] pString, dchar[] pSubString) //------------------------------------------------------- { uint lSize; if (pString.length < pSubString.length) return -1; if (pSubString.length == 0) return -1; lSize = pString.length-pSubString.length; if (pString[lSize .. $] != pSubString) return -1; return lSize; } </code> I think I'll amend this design now, but that doesn't change my feeling about bool/non-bool comparisions ;-) -- Derek (skype: derek.j.parnell) Melbourne, Australia 23/08/2005 9:34:46 AMDamn stupid bool strikes again. What wrong with this line? ... if (util.str.ends(pWord, "'s") == true) return;I think the design of util.str.ends is just as much at fault as int/bit conversions. I would agree with you that ends should return true/false rather than an index. I say that since the index can be trivially computed from the lengths involved and since the name "ends" doesn't give any clue that it is returning an index. I think you were set up :-)
Aug 22 2005