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