On Mon, Oct 15, 2018 at 7:15 PM Isaac S. via Digitalmars-d
<digitalmars-d@puremagic.com> wrote:
>
> On Tuesday, 16 October 2018 at 00:36:12 UTC, Manu wrote:
> > *snip*
> >
> > Yes, except maybe I didn't make it clear that I DO expect the
> > un-shared methods to be aware that a sibling shared method does
> > exist
> > (you wrote it!), and that it may manipulate some state, so *if*
> > the
> > un-shared method does interact with the same data that the
> > shared
> > method may manipulate (in many cases, it won't; it's likely
> > only a
> > small subset of an object's functionality that may have
> > thread-safe
> > access), then the un-shared method does need to acknowledge that
> > functional overlap.
> > So even though a method is un-shared, it still needs to be
> > aware that
> > it may have sibling methods that are shared. If they don't
> > access an
> > overlapping data-set, no special handling is required. If they
> > do
> > overlap, they may need to coordinate appropriately.
>
> I understand your point but I think the current shared (no
> implicit conversion) has its uses. It can be quite useful to have
> one interface for when an object is shared and one for when it is
> not (one with and without the synchronization cost). Sure,
> something as trivial as a counter can be re-implemented in both
> ways but more complex objects would easily result in extreme code
> duplication.

If you can give a single 'use', I'm all ears ;)

> It's also easy to acknowledge that implicit conversion to shared
> has its uses.

I actually know of many real uses for this case.

> Instead of forcing one way or another, how about we leave the
> decision up to the programmer? Say something like "alias this
> shared;" enables implicit conversion to shared.

That might be fine.
Like I said in OP, the first point that I think needs to be agreed on,
is that shared can not read or write members. I think that's a
pre-requisite for any interesting development.

Reply via email to