On Tuesday, 23 April 2013 at 05:05:29 UTC, Chris Cain wrote:
On Tuesday, 23 April 2013 at 04:58:30 UTC, anonymous wrote:
For fast bitwise comparison there's the "is" operator.
The "==" operator should be "slow".
See also http://d.puremagic.com/issues/show_bug.cgi?id=3789

Well okay. The docs will have to be updated for this issue if it's "fixed".

For instance:
http://dlang.org/ctod.html#structcmp

In any case, I stand by that if you have a particular definition of behavior, you should provide it instead of expecting it to "just work." But I suppose using "is" is more appropriate for this type of behavior. But calling it "broken" is a bit too strong.

OK let me sum this up, as you seem confused.

Whatever you think == should do, it is broken. If we assume that == should check for equality, then :
pragma(msg, S("a") == S("a".idup));
writeln(S("a") == S("a".idup));
writeln(S(+0.0) == S(-0.0));

Should all evaluate to true.

If == stand for identity, then they must all be false.

You see that whatever is the semantic of ==, it is not properly implemented right now.

Now, as we use == for equality and "is" for identity in other places (slices and objects for instance) it make sense to use the same for struct. But that another topic, as the demonstrated behavior is wrong, whatever is the semantic of ==.

Reply via email to