order of static constructor execution

Regan Heath regan at netmail.co.nz
Wed Mar 17 02:53:56 PDT 2010


Walter Bright wrote:
> Regan Heath wrote:
>> So, this needs to work when compiling modules seperately and then 
>> linking, likewise libraries, right?  Is that the problem you're 
>> referring to?
> 
> Yes.
> 
>> Couldn't you store a list of dependencies in usage order in the output 
>> of the compile (the .o[bj] file) and use these lists when linking to 
>> resolve module init order.  You would need to know the 'main' module 
>> for a starting point, but from there you should be able to create an 
>> ordering.  You'd probably want to treat a static library as a single 
>> dependency, likewise C libraries etc.
> 
> Then you'd have to essentially build the linker into the compiler.

Ah.. I'd have thought using 'import' as you currently do was the same 
sort of thing, but I guess I don't know enough about how compilers work :)

The thing that suddenly seemed odd to me, and the reason I wanted to see 
how C# did it was the fact that you're using 'import' to determine 
whether/when something needs to be initialised, when in fact 'import' 
doesn't guarantee the thing is actually used at all.

I can import something erroneously into a module, then never actually 
use anything in that module, or, use only one pure function that doesn't 
use the static needs-to-be-initialised data.

Using 'import' is always going to produce more false positives, but I 
guess it also cannot produce a false negative.

R







More information about the Digitalmars-d mailing list