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.