On 12-mar-10, at 19:17, Walter Bright wrote:

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.

well if one tracks what gets initialized and what is accessed then one could associate a lazy constructor with each static value, and call the static initializer explicitly before access in the static methods, so that the cost is paid only during startup. But that is quite some work, because static initializers in D are so flexible, and so tracking what they initialize and what they access is some work (even if theoretically the compiler can know it). Also invalid initializations could be catched (but only at runtime) having 3 initialization states: on initialized, during initialization, initialized. I still think that something like my proposal @dependOnly(modules) for static initializers is a valid alternative.

Fawzi

Reply via email to