Hello Walter,
Doing lazy initialization certainly works, but it would require all static member access to go through a check for initialization, first. The cost of this check persists for a statically compiled language; for a JITted language like C# the access can be rewritten to remove the check.
That and I have some patterns I like using where I use "static this()" to inject results without any change to the code base. For that to work, they need to run before things get referenced.
void delegate(string)[string] args; // static this injects into here. void main(string[] argv) { foreach(string s; argv) args[GetBefor('=',s)](GetAfter('=',s)); } -- ... <IXOYE><