int opEquals(Object), and other legacy ints

Frits van Bommel fvbommel at REMwOVExCAPSs.nl
Sat Jul 29 04:09:33 PDT 2006


kris wrote:
> Frits van Bommel wrote:
>> kris wrote:
>>
>>> Walter Bright wrote:
>>>
>>>> Stewart Gordon wrote:
>>>>
>>>>> But if the function only tries to return 0 or 1 anyway, then what 
>>>>> difference does it make?  At the moment, I can't think of an 
>>>>> example of equality testing that can be made more efficient by 
>>>>> being allowed to return a value other than 0 or 1.
>>>>
>>>>
>>>>
>>>> I can. (a == b), where a and b are ints, can be implemented as (a - 
>>>> b), and the result is int 0 for equality, int !=0 for inequality.
>>>
>>>
>>>
>>> So, why not treat false as 0, and true as not 0?  That way, it works 
>>> just the same as the "int" version does (and comparing/testing 
>>> against zero doesn't hit the address-bus). Yes, I can see some 
>>> potential for concern there; but is there anything insurmountable?
>>
>>
>> Then what would happen if a and b differ by, say, 256? Remember, an 
>> int is 4 bytes, a bool is only 1.
> 
> Sure, but it's generally more efficient to do all logical and arithmetic 
> operations in the native width of the device anyway ~ generally 32bits 
> for current D compilers.
> 
> If you're talking about issues related to actually storing a bool 
> result, then that's part of the "concerns" noted above. Bool values 
> derived in certains ways may need to be folded for storage, but not for 
> testing. The subtraction case above may be included in that group, but 
> testing should still only require a compare against zero (for both true 
> and false). I'm suggesting only that zero values should *always* be used 
> to test for 'truth' ~ never 1, or 255, or any value other than zero. 
> Anywhere the keyword "true" is used (or implied) for comparative 
> purposes, test against zero and invert the jmp-condition instead. If 
> that's not done already, it would probably speed things up in many cases.

Actually, I'm pretty sure testing for zero is already how it's done 
(just with 1-byte operands instead of 4-byte ones).

Something else: if there are multiple ways to represent true then 
equality testing just got a lot more complicated :).



More information about the Digitalmars-d-bugs mailing list