On Friday, 24 May 2013 at 08:47:40 UTC, Dicebot wrote:
Also one issue Don has brought my attention to is this snippet:
// -----------------------------
immutable int x = 1;
void main()
{
import std.stdio;
writeln(x);
}
static this()
{
x = 42;
}
// (does not compile in 2.062 and won't in 2.063)
// ------------------------------
Whatever approach is taken, I think it should be consistent
with structs/classes in a sense that global variables are
module members and module constructor is, well, constructor.
But it looks very hard to do because "immutable" is implicitly
"shared". Ideas?
That shouldn't compile because the non-shared module constructor
writes to the shared variable x whenever a new thread starts with
that module.
But a better question is whether or not it should compile with a
shared module constructor:
immutable int x = 1;
shared static this()
{
x = 42;
}
... I don't know, but I think it should follow the same logic as
with a non-static immutable member variable and a shared default
constructor.
Also, I think the following shouldn't compile due to a non-shared
module constructor assigning to a shared variable (currently it
does compile):
immutable int x;
static this()
{
import std.random;
x = uniform(0, 100);
}