On Monday, 22 January 2024 at 23:28:40 UTC, Jonathan M Davis wrote:


Of course, ultimately, different programmers have different preferences, and none of us are going to be happy about everything in any language.

It's not only about preferences. The feature is inconsistent with how 'invariant' and 'synchronized' are specified. They imply class-instance-level private, while the language dictates module-level. Consider:

```
synchronized class C
{
    private int x;
    private int y;

    invariant () { assert (x == y); }
}

void foo(C c)
{
    // mutate c
}
```

With module-level private, 'foo' is part of C's public interface, but it neither locks on c, nor runs the invariant checks. I personally have no idea how to fix that sensibly except by ditching class invariant/synchronized entirely.

Reply via email to