Very limited shared promotion

Timon Gehr timon.gehr at gmx.ch
Tue Jun 18 14:02:56 UTC 2019


On 18.06.19 14:00, Manu wrote:
> On Tue, Jun 18, 2019 at 3:05 PM FeepingCreature via Digitalmars-d
> <digitalmars-d at puremagic.com> wrote:
>>
>> On Monday, 17 June 2019 at 23:46:44 UTC, Manu wrote:
>>> Is this valid?
>>>
>>> int x;
>>> void fun(scope ref shared(int) x) { ... }
>>> fun(x); // implicit promotion to shared in this case
>>>
>>> This appears to promote a thread-local to shared. The problem
>>> with such promotion is that it's not valid that a thread-local
>>> AND a shared reference to the same thing can exist at the same
>>> time.
>>>
>>> With scope, we can guarantee that the reference doesn't escape
>>> the callee.
>>> Since the argument is local to the calling thread, and since the
>>> calling thread can not be running other code at the same time
>>> as the
>>> call is executing, there is no way for any code to execute with
>>> a
>>> thread-local assumption while the callee makes shared
>>> assumptions.
>>>
>>> I think this might be safe?
>>
>> Can `fun` execute a call to another nested function that accesses
>> `x` unshared?
> 
> Well, under my proposal, if the capture were actually qualified, it
> wouldn't be possible to call another local function with a
> lesser-qualified capture; so that's another +1 for qualifying the
> capture! ;)
> 

Bullshit.


More information about the Digitalmars-d mailing list