`shared`...

Nicholas Wilson iamthewilsonator at hotmail.com
Mon Oct 1 03:57:59 UTC 2018


On Monday, 1 October 2018 at 03:33:16 UTC, Manu wrote:
> On Sun, Sep 30, 2018 at 8:20 PM Nicholas Wilson via 
> Digitalmars-d <digitalmars-d at puremagic.com> wrote:
>>
>> On Monday, 1 October 2018 at 02:29:40 UTC, Manu wrote:
>> > struct Bob
>> > {
>> >   void setThing() shared;
>> > }
>> >
>> > As I understand, `shared` attribution intends to guarantee 
>> > that
>> > I dun
>> > synchronisation internally.
>> > This method is declared shared, so if I have shared 
>> > instances,
>> > I can
>> > call it... because it must handle thread-safety internally.
>>
>> seems reasonable
>>
>> https://github.com/dlang/dmd/pull/8782
>
> Haha, sneaky bugger :P
> I reckon the patch is gonna be a lot bigger than that though!

Of course, there will be updating the test suite. And Walter will 
probably tell you to bugzilla this.

implicit conversion of mutable (i.e. no mods) to const share 
should be absolutely no problem, as that it rusts borrowing model 
(one owning mutable thread local reference and zero or more non 
thread local non-owning const references) and is fine.

  mutable to mutable shared I'm not so sure as references to 
otherwise owned references could escape.

shared Bob* sneaky;

struct Bob
{
   void setSneaky() shared // legit as this is shared
    {
       sneaky = &this;
    }
}
void oblivious(ref shared Bob a, ref Bob b)
{
   a.setSneaky(); // Fine

   b. setSneaky(); // would become not an error, but totally not 
fine.
}

unfortunately scope is not a modifier so the PR will have to be 
larger, oh well.




More information about the Digitalmars-d mailing list