On Fri, 24 May 2013 04:47:38 -0400, Dicebot <m.stras...@gmail.com> 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.

This is not what I am looking to fix. Module ctors are very different from struct ctors.

Also, I specifically avoided the "pre-initialized" values, because that is outside the scope of this problem. We assume that for the sake of this argument, the value is uninitialized before the ctor is called.

But it looks very hard to do because "immutable" is implicitly "shared". Ideas?

Use shared static this, and the runtime should run your module ctors in dependency order. That is, another module that uses x must have this module's ctors run before it.

-Steve

Reply via email to