On Friday, 18 May 2018 at 12:16:55 UTC, aliak wrote:

You may not need a new word at all. You can also enhance private to take arguments. Package already does this. You can give private a symbol list that says which symbols this is private for. So:

class A {
  private int x;
  private(A) int y;
}
void main() {
  A a = new A();
  a.x = 7; // ok, it's private to module
  a.y = 3; // error, it's sealed to class
}


That's actually a decent way to go about it. It matches the package syntax and avoids new keywords. It's also not as onerous as repurposing an existing keyword (like `module`), nor does it cause any breakage. Though, I would argue that rather than allowing any old symbol, it be restricted to `this`:

private(this) int y;

This keeps the implementation simple and the scope focused. If a DIP were put forward, I think this would be the approach to take. Though a fairly strong case will still need to be made as to why this is beneficial (use cases, example code, etc). To bolster the case, I would look at the reasoning behind the recommendation in Java that classes use the public API internally rather than manipulating member variables directly to improve maintainability.


Reply via email to