order of static constructor execution

Fawzi Mohamed fmohamed at mac.com
Fri Mar 12 08:00:50 PST 2010


On 2010-03-12 15:05:25 +0100, Michel Fortin <michel.fortin at michelf.com> said:

> [...]
> Most mixins static constructors will probably have to be @cyclehead.

Here is an example of a reasonable use case to clarify why I think that 
my proposal, or something like it is the correct solution.
Often the static initializers like those in module b or c would be 
mixed in (for example to give serialization support, as for example the 
class name in template classes is not unique).

{{{
module a;
// imports modules but does not create a circular dep

class Register {
  void register(...){...}
  ...
}

Register globalRegister;
static this(){
  globalRegister=new Register();
}

-------
module b;
import c;
import a;

class Bla {...}
@dependOnly(a) static this {
  globalRegister.register(...);
}
----
module c;
import b;
import a;

class Bla2 {...}
@dependOnly(a) static this {
  globalRegister.register(...);
}
}}}

My proposal would give the correct initialization order, and would 
still detect invalid cases (assuming the programmers does not lie about 
the dependOnly).

Fawzi




More information about the Digitalmars-d mailing list