shared - i need it to be useful
Stanislav Blinov
stanislav.blinov at gmail.com
Thu Oct 18 17:47:29 UTC 2018
On Thursday, 18 October 2018 at 17:17:37 UTC, Atila Neves wrote:
> On Monday, 15 October 2018 at 18:46:45 UTC, Manu wrote:
>> 1. shared should behave exactly like const, except in addition
>> to inhibiting write access, it also inhibits read access.
>
> How is this significantly different from now?
>
> -----------------
> shared int i;
> ++i;
>
> Error: read-modify-write operations are not allowed for shared
> variables. Use core.atomic.atomicOp!"+="(i, 1) instead.
> -----------------
>
> There's not much one can do to modify a shared value as it is.
i = 1;
int x = i;
shared int y = i;
And so on. The compiler needs to forbid this.
> Unless I'm missing something, I can't arbitrarily do anything
> with shared members right now.
Except arbitrarily read and write them :)
>> From there, it opens up another critical opportunity; T* ->
>> shared(T)*
>> promotion.
> I don't think that works. See below.
Welcome to the club.
>> Assuming the rules above: "can't read or write to members",
>> and the understanding that `shared` methods are expected to
>> have threadsafe implementations (because that's the whole
>> point), what are the risks from allowing T* -> shared(T)*
>> conversion?
>
> int i;
> tid.send(&i);
> ++i; // oops, data race
Doesn't work. No matter what you show Manu or Simen here they
think it's just a bad contrived example. You can't sway them by
the fact that the compiler currently *prevents* this from
happening.
>> All the risks that I think have been identified previously
>> assume that you can arbitrarily modify the data.
> Do you have any examples of arbitrarily modifying shared data?
> I can't think of any.
See near the beginning of this post ;)
>> That's insanity... assume we fix that... I think the
>> promotion actually becomes safe now...?
>
> I don't think so, no.
+100500.
More information about the Digitalmars-d
mailing list