On Thu, Oct 18, 2018 at 6:50 PM Stanislav Blinov via Digitalmars-d
<digitalmars-d@puremagic.com> wrote:
>
> On Friday, 19 October 2018 at 01:22:53 UTC, Manu wrote:
> > On Thu, Oct 18, 2018 at 3:10 PM Simen Kjærås via Digitalmars-d
> > <digitalmars-d@puremagic.com> wrote:
> >>
> >>
> >> Now, Two very good points came up in this post, and I think
> >> it's worth stating them again, because they do present
> >> possible issues with MP:
> >
> > It is easy to respond to these.
> >
> >> 1) How does MP deal with reorderings in non-shared methods?
> >>
> >> I don't know. I'd hide behind 'that's for the type implementor
> >> to handle', but it's a subtle enough problem that I'm not
> >> happy with that answer.
> >
> > This is a red-herring. Opaque function calls are never
> > reordered.
> > If they are inlined, the compiler has full visibility to the
> > internal machinery present.
>
> You don't say?.. And what, exactly, stops the optimizer from
> removing "unnecessary" reads or rearranging them with stores,
> given the original code, which, if you freaking read it, you'd
> see there's no indication that it's not allowed to do so.
>
> > If you call one function that performs an atomic op, then
> > another that performs an atomic op, it is impossible for the
> > CPU to reorder atomic op's around eachother, that would defeat
> > the entire point of hardware atomic operations.
>
> I'm not talking about CPU reordering at all. I'm talking about
> the optimizer.
>
> > In short, he made up this issue, it doesn't exist.
>
> Yeeees, of course I have. What else have I made up, can you tell?
> You know what doesn't exist though? Even one example of a useful
> implicit conversion form mutable to shared from you. Not even one.
>
> >> 2) What about default members like opAssign and postblit?
> >>
> >> The obvious solution is for the compiler to not generate these
> >> when a type has a shared method or is taken as shared by a
> >> free function in the same module. I don't like the latter part
> >> of that, but it should work.
> >
> > These aren't issues either. There's nothing wrong with atomic
> > assignment; you just have to implement an atomic assignment.
>
> You just haven't read the code. Those members aren't even
> `shared`. The *least* you can do is disable them *if* you're
> going to cast your variable to `shared`. Otherwise your
> "interface" remains non-threadsafe.
>
> > Postblit is being replaced with copy-ctor's and `shared` is one
> > of the explicit reasons why! Copy-ctor's are also fine, it
> > would express an atomic assignment.
>
> And this strengthens *my* belief that you haven't at all thought
> about this. There is literally *no* purpose for any `shared`
> types to have any copy-ctors. The only feasible copy primitives
> are from shared to local and from local to shared. Not to mention
> that again, to even talk about your "implicit" conversions, you
> must first think about what can happen to the *owned*
> (non-`shared`) reference after the conversion. Hint: you can't
> copy it. You can't assign *to it*. Not via default-generated
> postblits and opAssigns, which are not, and can not, be "atomic".
> I'm fully aware about postblits being "replaced" by copy-ctors,
> I'm also fully aware how "much" thought was put into that wrt.
> `shared`.
>
> > This is just hot air, and only strengthen my conviction.
>
> You know what, I'm fed up with you too. Just show me one, *one*
> non-contrived example of useful implicit conversion from mutable
> to shared. So far you haven't produced *any at all*. Then we can
> talk about what is hot air here. Produce, or drop this
> presumptious crap.

You are an obscene person. I'm out.
You win.

Reply via email to