Thread overview
__gshared immutable array of immutable elements
Nov 12, 2013
Nicolas Sicard
Nov 12, 2013
Martin Drašar
Nov 12, 2013
Dicebot
Nov 12, 2013
Nicolas Sicard
November 12, 2013
In this declaration (tango.io.Console.d from Tango2):

__gshared immutable immutable(char)[] Eol = "\r\n";

Aren't the two `immutable` keywords redundant? Why would `__gshared` be necessary for such an immutable type?

Thanks
November 12, 2013
Dne 12.11.2013 19:49, Nicolas Sicard napsal(a):
> In this declaration (tango.io.Console.d from Tango2):
>
> __gshared immutable immutable(char)[] Eol = "\r\n";
>
> Aren't the two `immutable` keywords redundant? Why would `__gshared` be
> necessary for such an immutable type?
>
> Thanks

Hi,

this declaration is equal to

__gshared immutable string Eol = "\r\n";

Those two immutables are not redundant, because it is an array of immutable chars (string), that is itself immutable.

The __gshared should not be necessary, but given some quirks with type system and concurrency, it may be necessary to have it. But this is just a guess from me.

Drasha
November 12, 2013
On Tuesday, 12 November 2013 at 20:09:57 UTC, Martin Drašar wrote:
> Those two immutables are not redundant, because it is an array of immutable chars (string), that is itself immutable.

It is redundant because "immutable" is transitive. "immutable char[]" is equivalent.

But Tango has lot of meaningless and redundant attributes ( "final private" ;) )
November 12, 2013
On Tuesday, 12 November 2013 at 20:16:31 UTC, Dicebot wrote:
> On Tuesday, 12 November 2013 at 20:09:57 UTC, Martin Drašar wrote:
>> Those two immutables are not redundant, because it is an array of immutable chars (string), that is itself immutable.
>
> It is redundant because "immutable" is transitive. "immutable char[]" is equivalent.
>
> But Tango has lot of meaningless and redundant attributes ( "final private" ;) )

That´s what I thought. So no hidden subtlety here, just hyperprotection :)
Thanks