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);
}

Reply via email to