std.functional.memoize : thread local or __gshared memoization?

John Colvin via Digitalmars-d digitalmars-d at puremagic.com
Sat May 27 04:52:04 PDT 2017


On Saturday, 27 May 2017 at 10:29:05 UTC, Ola Fosheim Grøstad 
wrote:
> On Saturday, 27 May 2017 at 10:02:35 UTC, Jonathan M Davis 
> wrote:
>> As such, the fact that D programmers frequently decide to use 
>> __gshared in order to avoid dealing with the restrictions with 
>> shared is actually extremely bad. You can get away with it in 
>> some cases, but it's error-prone and is only going to get 
>> worse as the compiler improves.
>
> Hm, I would think that using __gshared would not be affected by 
> compiler improvements, since it would turn off optimizations 
> that assume that the variable doesn't change between reads?

Nope. __gshared isn't even part of the type so it can't do that.

__gshared int a;

void main()
{
     foo(a);
}

void foo(ref int b)
{
     // No way of knowing that b actually
     // references __gshared memory.
}

__gshared is a way of declaring a C-like global variable, but D 
does not - in general - support accessing it in a C-like way. My 
advice is to cast to shared before use, unless you're totally 
sure you know what other threads will be doing.


More information about the Digitalmars-d mailing list