cycle dependencies

Simen Kjærås simen.kjaras at gmail.com
Thu May 31 06:14:22 UTC 2018


On Wednesday, 30 May 2018 at 20:57:32 UTC, DigitalDesigns wrote:
> Why is this a runtime issue? It is not as if the execution of 
> static this are non-deterministic. The compiler and linker must 
> order the calls in some way. Maybe this is what you mean by own 
> object/linker?  But even then, they would only have to be 
> checked once so why check every time the exe is ran when once 
> it is ran it must remain statically oriented for all future.

Because of separate compilation, the compiler can't do it. 
Because the generic linker doesn't do that sort of thing, the 
linker can't do it.

The first part is essentially intractable - e.g. module A's 
static this uses a global variable in module B that's set by 
module C. Module A may be compiled separately from module C, so 
the compiler can't see the dependency.

If the linker is to do it, the compiler needs to encode the 
information in the object file, and the linker must be made 
specially to support this. Maybe this could be put in some 
optional section in the object file, and linkers that don't 
support it would just ignore the information. If a non-compliant 
linker is used, the runtime needs to have a fallback, so even 
this won't get us entirely out of the woods. Only supporting 
special linkers comes with its own set of problems.

--
   Simen


More information about the Digitalmars-d mailing list