Usability of "allMembers and derivedMembers traits now only return visible symbols"
Andrei Alexandrescu via Digitalmars-d
digitalmars-d at puremagic.com
Sat Sep 3 13:40:57 PDT 2016
On 9/3/16 7:57 PM, Jonathan M Davis via Digitalmars-d wrote:
> Previously __traits(allMembers, T) listed _all_ members, whereas now it wil
> only list the ones that are accessible. The same for
> __traits(derivedMembers, T). So, they'll still give you the private members
> if you use them inside the module in question but not elsewhere.
That... doesn't sound good. I wonder how such important changes slip by
Walter and myself unnoticed.
My thinking is that the plebes should be able to access things via the
object.member syntax by obeying the usual visibility rules. But
__traits(allMembers, T) should be the reflection backdoor that gives the
savvy users total access, at the obvious cost of an awkward syntax.
The fact that __traits(allMembers, T) compiles in all cases and has
DIFFERENT semantics depending on whether T is in the same vs. a
different module is the deadly sign of poor language design.
Martin, any chance we can undo this change to the language?
Andrei
More information about the Digitalmars-d
mailing list