On Saturday, 20 October 2018 at 17:06:22 UTC, Stanislav Blinov wrote:
On Saturday, 20 October 2018 at 16:48:05 UTC, Nicholas Wilson wrote:
On Saturday, 20 October 2018 at 09:04:17 UTC, Walter Bright wrote:
by code that believes it is unshared

you cannot `@safe`ly modify the memory through `b`, `a`'s view of the memory is unchanged in @safe code.

And that's already a bug, because the language can't enforce threadsafe access through `a`, regardless of presence of `b`. Only the programmer can.

access through `a` is through the owned reference threadsafety through a does't mean anything, all _other_ access must ensure that the are ordered correctly.


and, code that believes it is shared.

you cannot have non-atomic access though `b`, `b` has no @safe view of the memory, unless it is atomic (which by definition is synchronised).

Synchronized with what? You still have `a`, which isn't `shared` and doesn't require any atomic access or synchronization.

Synchronized w.r.t any writes to that memory, e.g. from `a`.

At this point it doesn't matter if it's an int
or a struct.

Yes.

As soon as you share `a`, you can't just pretend that reading or writing `a` is safe.

You can if no-one else writes to it, which is the whole point of Manu's proposal. Perhaps it should be const shared instead of shared but still.


Reply via email to