On Thursday, 15 February 2018 at 06:43:52 UTC, Arun
Chandrasekaran wrote:
I was reading through
https://wiki.dlang.org/Access_specifiers_and_visibility#What_is_missing
[...]
DMD v2.077.1 exhibits the same behavior. Is this is already
being worked on? Or is there any plan to address this? Can this
be fixed? If so how? If not, why not?
AFAICT it's a feature as the article correctly explains this
doesn't work well with serialization:
Compile-time reflection, i.e. serialization libraries or
@attribute scanners. Limiting access for __traits may forbid
certain currently working idioms.
Use Voldemort types if you want to truly encapsulate something.
[...]
Also, why is the default visibility of global variables at
module level public Shouldn't they be private by default to
provide better encapsulation guarantee (and linkage guarantee
if the above is addressed in future)?
From readability point of view as well, for instance, if I want
to know all the functions "exposed" by the current module, I
can simply grep for public.
It's a sensible default for most libraries and problems.
Simply use `private:` if you think otherwise.