Le 17/11/2012 05:49, Jason House a écrit :
On Thursday, 15 November 2012 at 16:31:43 UTC, Sean Kelly wrote:
On Nov 11, 2012, at 6:30 PM, Walter Bright
<newshou...@digitalmars.com> wrote:
To make a shared type work in an algorithm, you have to:
1. ensure single threaded access by aquiring a mutex
2. cast away shared
3. operate on the data
4. cast back to shared
5. release the mutex
So what happens if you pass a reference to the now non-shared object
to a function that caches a local reference to it? Half the point of
the attribute is to protect us from accidents like this.
The constructive thing to do may be to try and figure out what should
users be allowed to do with locked shared data... I think the basic idea
is that no references can be escaped; SafeD rules could probably help
with that. Non-shared member functions might also need to be tagged with
their ability to be called on locked, shared data.
Nothing is safe if ownership cannot be statically proven. This is
completely useless.