Why D is not popular enough?

Andrei Alexandrescu via Digitalmars-d digitalmars-d at puremagic.com
Fri Aug 12 11:21:04 PDT 2016


On 08/12/2016 02:01 PM, H. S. Teoh via Digitalmars-d wrote:
> On Fri, Aug 12, 2016 at 02:04:53PM -0400, Andrei Alexandrescu via Digitalmars-d wrote:
>> On 08/12/2016 01:21 PM, Steven Schveighoffer wrote:
>>> On 8/12/16 1:04 PM, Jonathan M Davis via Digitalmars-d wrote:
>>>>
>>>> Honestly, I don't think that shared is broken.
>>>
>>> Yes. It is broken.
>>>
>>> shared int x;
>>> ++x; // error, must use atomicOp.
>>> x = x + 1; // OK(!)
>>
>> How is this broken and how should it behave? -- Andrei
>
> ?!
>
> Isn't it obvious that assigning to a shared int must require atomicOp or
> a cast? `x = x + 1;` clearly has a race condition otherwise.

It is not to me, and it does not seem like a low-level race condition to 
me (whereas ++x is).

Currently the compiler must ensure that an atomic read and an atomic 
write are generated for x. Other than that, it is the responsibility of 
the user. The use of "shared" does not automatically relieve the user 
from certain responsibilities.

I agree that it would be nice to have stronger protection against 
higher-level bugs, but those are outside the charter of "shared". Consider:

x = *p + 1;

How would the compiler reject the right uses but not the case when p == &x?


Andrei


More information about the Digitalmars-d mailing list