On Friday, 10 July 2020 at 17:18:25 UTC, mw wrote:
On Friday, 10 July 2020 at 08:48:38 UTC, Kagamin wrote:
On Friday, 10 July 2020 at 05:12:06 UTC, mw wrote:
looks like we still have to cast:
as of 2020, sigh.

Why not?

Because cast is ugly.

Implicitly escaping thread local data into shared context is much uglier than a cast. D disallows such implicit sharing, and thus ensures existence of thread local data on the language level. SysTime wasn't designed to be shared and due to this is incompatible with sharing by default, which enforces the promise that SysTime must be thread local, because it wasn't designed to be shared.

synchronized setTime(ref SysTime t) shared {
    (cast()this).time = t;
}
Steven's solution isn't good in the general case, because it still puts thread local data in shared context, which itself is a problem, because it makes thread local data implicitly shared, and when you work with such implicitly shared thread local data, you can't assume it's thread local, because it might be escaped into shared context. In this case the language prevented implicit sharing of thread local data (this is what shared does and does it well contrary to the popular myth that shared is broken).
            • Re:... Steven Schveighoffer via Digitalmars-d-learn
            • Re:... Arafel via Digitalmars-d-learn
            • Re:... Kagamin via Digitalmars-d-learn
            • Re:... Arafel via Digitalmars-d-learn
            • Re:... Kagamin via Digitalmars-d-learn
            • Re:... Kagamin via Digitalmars-d-learn
            • Re:... Arafel via Digitalmars-d-learn
            • Re:... Dominikus Dittes Scherkl via Digitalmars-d-learn
            • Re:... Arafel via Digitalmars-d-learn
            • Re:... Kagamin via Digitalmars-d-learn
        • Re: how to a... Kagamin via Digitalmars-d-learn
          • Re: how ... Steven Schveighoffer via Digitalmars-d-learn
  • Re: how to assign to shar... Jonathan M Davis via Digitalmars-d-learn

Reply via email to