Preparing for the New DIP Process

Meta jared771 at gmail.com
Fri Jan 26 22:21:22 UTC 2024


On Thursday, 25 January 2024 at 15:03:41 UTC, Max Samukha wrote:
> 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.

This is the only valid reason for introducing class-private 
that's ever been put forth in this forum. I saw someone else post 
a similar argument around class invariants awhile back as well 
and it completely changed my mind on the issue.


More information about the Digitalmars-d-announce mailing list