On 04/21/12 02:22, Manu wrote:
> On 21 April 2012 03:05, Michel Fortin <[email protected] 
> <mailto:[email protected]>> wrote:
> 
>     If you're trying to make a C-like global, write this:
> 
>            static __gshared int x;
> 
> 
> dlang.org <http://dlang.org> seems to disagree:
> "__gshared may also be applied to member variables and local variables. In 
> these cases, *__gshared is equivalent to static*, except that the variable is 
> shared by all threads rather than being thread local."
> Suggests to me that you are not required to state both.
> 
> So which is correct?

Both. __gshared implies static for _member variables and local variables_ - it 
has to,
otherwise they wouldn't be shared. Would requiring the redundant "static" 
keyword for
these cases really be an improvement?

> It appears most people are confused about this. I'm thinking more and more 
> it's worth addressing that confusion with some warnings/errors.

"static" *should* be silently accepted at module scope (and everywhere else 
where it's
also not needed) - so that things like mixins work and don't need extra 
static-less
versions.

If you want to take a compiletime address of something then you may just as 
well do
that and work with the pointer (and D's lack of '->' helps here); if you really 
want
to work with aliases... well there's always:

    @property ref x() { return thing.x; }
    AliasTheInt!( x )();

which, for simple cases like this one, will do the right thing (ie compile to 
one
store instruction, assuming a sane compiler). 

artur

Reply via email to