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