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.

Current situation where you can arbitrarily access shared members
undermines any value it has.

Unless I'm missing something, I can't arbitrarily do anything with shared members right now.

Shared must assure you don't access
members unsafely, and the only way to do that with respect to data
members, is to inhibit access completely.

Or use atomic operations.

Assuming this world... how do you use shared?

https://github.com/atilaneves/fearless

or

https://dlang.org/phobos/core_atomic.html

From there, it opens up another critical opportunity; T* -> shared(T)*
promotion.

I don't think that works. See below.

If you write a lock-free queue for instance, and all the methods are `shared` (ie, threadsafe), then under the current rules, you can't
interact with the object when it's not shared, and that's fairly
useless.

Not really:

-----------
struct FancyQueue(E) {
    // ...
    void pushBack(this T)(E element) {
        static if(is(T == shared)) {
            // lock mutex or whatever is needed
auto safeThis = () @trusted { return cast(FancyQueue) this; }();
        } else {
            // no need to lock anything
            alias safeThis = this;
        }
        // profit
    }
}
-----------

Usable if shared or not.

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


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.

That's insanity... assume we fix that... I think the promotion actually becomes safe now...?

I don't think so, no.

Reply via email to