A confusing and dangerous "feature" of D was to treat the expression
if(arr) as meaning if(arr.ptr).
Anyone coming from any number of other languages may think that if(arr)
means "if arr has any elements". Typically one cares what is inside an
array, not where it lives.
However, while checking to see if an array has elements is very similar
to checking for a null pointer (obviously, a null pointer array should
have no elements), it's not equivalent. Therefore, when attempting to
fix this confusion, we had to disable the if(arr) check altogether. You
must now specify what part of the array you care about, if(arr.ptr) or
if(arr.length).
As usual with changes of this nature, there are differing opinions, and
differing styles. I personally never use null as a special value for an
array, but others do. They use if(arr) to actually mean if(arr.ptr). For
these cases, the update will cause some amount of busywork changing
these checks.
But when updating Phobos to comply with this change, we found several
actual incorrect usages. So I think the change is worth it, and not much
busywork. YMMV.
What do you think?
references:
https://issues.dlang.org/show_bug.cgi?id=4733
https://github.com/D-Programming-Language/dmd/pull/2885
https://github.com/D-Programming-Language/tools/pull/166
-Steve