On Friday, 18 May 2018 at 12:00:58 UTC, Gheorghe Gabriel wrote:
On Thursday, 17 May 2018 at 02:32:07 UTC, KingJoffrey wrote:
I propose an idea, for discussion (robust discussion even better ;-)

Add an new attribute to class, named 'sealed'.

No, not sealed as in Scala.

No, not sealed as in C#

sealed as in oxford dictionary (close securely, non-porous).

when sealed is applied on the class, this means the class is sealed.

the sealed attribute only makes sense within a module, and affects nothing outside of the module.

When sealed is applied to the class, then, interfacing to a class within a module, from code outside that class - but still within the module, can now only occur via the published interface of the class.

outside code in the module, can no longer directly access your private parts!

The class is sealed.

I think this code has cleaner sintax:

class A {
    private int x;
    sealed 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
}

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
}

Cheers,
- Ali


Reply via email to