Synchronized classes have no public members

Jonathan M Davis via Digitalmars-d digitalmars-d at puremagic.com
Thu Oct 15 08:33:27 PDT 2015


On Thursday, 15 October 2015 at 15:20:25 UTC, Steven 
Schveighoffer wrote:
> On 10/13/15 2:58 AM, Andrei Alexandrescu wrote:
>> https://github.com/D-Programming-Language/dmd/pull/5188 
>> implements a
>> rule defined in TDPL: synchronized classes shall have no 
>> public members.
>
> When I first read this, I thought "how the hell will you use 
> this thing then?"
>
> Then after reading through most of this thread, I realize you 
> mean public *field* members. Public *method* members are 
> allowed, right?

Yes. The idea is that with a synchronized class, all access to 
the object must be via its member functions so that you can't 
bypass the mutex that protects the object. Then, because the 
compiler knows that nothing else can have direct access to the 
class' member variables and that they're protected by a mutex 
when inside of a member function, it's able to strip the outer 
layer of shared from the member variables when you operate on 
them. So, for basic cases at least, we don't have to cast away 
shared to operate on shared data - though for more complicated 
cases (e.g. stuff where stripping off the outer layer of shared 
isn't enough), you'd still have to cast away shared (though at 
least, it still encapsulates the shared data on some level in 
that case).

- Jonathan M Davis


More information about the Digitalmars-d mailing list