On Wed, 14 Oct 2015, Paul Rubin wrote: > Ben Bacarisse writes: >> Do you mean that there are reasons to permit !(a == b) and a != b to >> have different values in some cases? > > I think he meant they should both return the same value, but it is ok if > they don't use the same algorithm. Of course it may be possible for the > compiler to optimize the first into the second. The idea is just that > if (a != b) { ... } can be much faster than if (a == b) { ... } . As I seem to understand, Ben questioned that either the test on equality or on non-equality could be much faster than the other one. In Ada syntax: function "="(A, B: T) return Boolean is begin if Hash(A) /= Hash(B) then return False else return Slow_Equality_Test(A, B) end "="; function "/="(A, B: T) return Boolean is begin if Hash(A) /= Hash(B) then return True else return Not Slow_Equality_Test(A, B) end "/="; -- if this where allowed in Ada It seems quite clear that for any inputs X and Y, the expressions X = Y and X /= Y should evaluate at the same speed. Or what am I missing? Actually, "/=" could be faster than "=" if either where defined as follows: function "="(A, B: T) return Boolean renames Slow_Equality_Test; function "/="(A, B: T) return Boolean is (Hash(A) /= Hash(B)); -- second case Redefining "=" this way is just missing an optimization. Redefining "/=" is that way is a bug. So how could "/=" really be faster than "="? My guess is that the devil's advocate, Maciej Sobczak, assumed that "=" is already in use as identifier, instead of another identifier for the Slow_Equality_Test, as I call it. Which means, we cannot employ the optimization for equality. An independent "/=" would then allow us to optimize non-equality. But this would be a design flaw, and it might be easy to fix: function "="(A, B: T) return Boolean is -- optimized equality begin if Hash(A) /= Hash(B) then return False else return Outer_Package."="(A, B) end "="; -------- I love the taste of Cryptanalysis in the morning! -------- www.uni-weimar.de/de/medien/professuren/mediensicherheit/people/stefan-lucks ----Stefan.Lucks (at) uni-weimar.de, Bauhaus-Universität Weimar, Germany----