On Saturday, 17 March 2018 at 11:08:27 UTC, psychoticRabbit wrote:
On Saturday, 17 March 2018 at 09:18:13 UTC, Nick Treleaven wrote:
It's a language design decision as to whether a particular feature is worth supporting. I would like this feature too though. I'm not sure how much compiler complexity would be added by having another visibility modifier.


D could add an new attribute to class members:  @deny

A @deny attribute can come before a classes private member, to indicate that the private member is to remain private, even within the module.

Cause sure, it nice to be among friends, but you don't want your friends knowing every thought that is going through your mind! Sometimes, somethings, just need to remain private.

@deny private string _userName;

now... _userName is no longer accessible at the module level, and class encapsulation is restored.

If had I any clue about compilers, I'd think this through more ;-)

I don't like the name @deny, personally I would rather see the private attribute changed to something like:

private(true) // The member is oly visible to its parent.

private(false) // Same as just "private", visible to whole module.

Could be specialized to something like:

private(this) // Same as private(true)

private(module) // Same as private(false)

That way it can be introduced without breaking changes and looks cleaner since it wouldn't be yet another attribute.

Really it's just an extension to the already existing attribute.

This feature should be relatively easy to implement since it's similar to the "package" attribute, which also takes a value as the module name.

Reply via email to