D Update Mitigates Comparison Gotcha
The D programming language tries to make a clear distinction between comparison by equality and comparison by identity. It does so by offering two different operators, one for each purpose.
// Are a and b equal? if (a == b) { ... } // Are a and b the same object? if (a is b) { ... }
As I’ve written about in a previous post this could be a source of confusion for D newbies, like myself. Someone who’s used to the comparison semantics of Java, for instance, is likely to learn to separate equality and identity the hard way. Until now, that is.
This code, where the equality operator is (wrongly) used to compare identities, used to produce a nasty Access violation error at runtime.
SomeObject a = null; if (a == null) { ... } //<-- Access Violation
Now, with the newly released versions of the D compiler (the stable 1.028 and the experimental 2.012,) this error is nicely caught by the compiler, which kindly instructs us to use the identity operator instead.
Error: use 'is' instead of '==' when comparing with null
Unfortunately, it won’t help us discover all cases of wrongly used equality operators. For instance, this piece of code still produces the dreadful runtime AV.
SomeObject a = null; if (a == a) { ... } // <-- Access Violation
Still, the update is a big improvement and will make it easier for a lot of people while learning the language.
Cheers!