DMD can implicitly convert class pointer to the bool. Is it bug or terrible feature?
bearophile
bearophileHUGS at lycos.com
Sun Nov 24 10:31:09 PST 2013
Andrei Alexandrescu:
> I'm not sure whether shadowing globals or members would be a
> good idea.
I understand. It's not a clear cut topic. There are real reasons
both for and against this idea. But surely it should be
considered. I have not yet (re)opened an enhancement request on
this.
> gcc has a -W flag for that, and someone tried to turn it on at
> Facebook but with debatable results. We ended up not using that
> warning.
In the example I have shown it's with() that is uncovering a
struct field with the same name of a module-level name. So it's
not exactly the same as a local variable shadowing a module-level
name (and currently with has anti-hijacking for local variables).
I think that shadowing module-level names with with() is not
good. Also because of this idea:
https://d.puremagic.com/issues/show_bug.cgi?id=6917
Regarding Facebook, I presume that Gcc flag was applied to plenty
of already written code. If you apply it since the start of a new
project perhaps (probably) its effects are different. This detail
is important, because lot of D code is yet to be written.
Regarding more generally the topic of shadowing module-level
names with local names, the attribute "pure" helps avoid some
cases, because you can only shadow immutable global names, and
this is a little less dangerous/troublesome.
Time ago I suggested an optional @outer() attribute, that's
useful to specify what names from outer scopes a function/method
is allowed to see and use. It looks a bit excessive, but it shows
that I have hated bugs caused by shadowing globals silently.
An IDE could underline the shadowing variables, turning the
silent shadowing into a visible one, without giving warnings
(it's a kind of much noisy warning), but unfortunately a compiler
like dmd can't do that.
Another problem is that a command like "import std.algorithm"
imports lot of names in the current module, and this could cause
many false alarms. But this could be a good thing, and it can
push Phobos devs to add more "private" tags to Phobos names, and
D developers to add more qualified imports in their programs.
Bye,
bearophile
More information about the Digitalmars-d
mailing list