if(arr) now a warning
Daniel Kozak via Digitalmars-d
digitalmars-d at puremagic.com
Fri Apr 10 01:10:18 PDT 2015
On Thursday, 9 April 2015 at 20:59:00 UTC, Steven Schveighoffer
wrote:
> 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
This change meens I had to rewrite almost 1k lines of code which
almost every one has been wrong :D.
I have lot of code rewriten from php directly to D.
PHP:
http://sandbox.onlinephpfunctions.com/code/b75620f9714784bd888b365b963723a1dc773d08
D:
http://dpaste.dzfl.pl/89f762890526
More information about the Digitalmars-d
mailing list