cycle dependencies

David Bennett davidbennett at bravevision.com
Thu May 31 21:12:50 UTC 2018


On Thursday, 31 May 2018 at 15:15:44 UTC, Steven Schveighoffer 
wrote:
> On 5/31/18 2:14 AM, Simen Kjærås wrote:
>> 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.
>> 
>> 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.
>
> Yes, this is really the crux of it.
>
> I want to stress that the cycle detection is not really for the 
> sake of detecting cycles, it's because you need to sort the 
> modules in the order their static ctors should be called. When 
> you can't sort them in an order, you have to call them in an 
> arbitrary order (probably just in the order they were linked).
>
> It is really a shame we have to do this at runtime, but that's 
> due to the compilation model we are stuck with, and the linker 
> tools we deal with.
>

Thinking about this problem for a while I can up with something 
that could both reduce the work the runtime had to do and allow 
us to remove the error in the OP.

But now I see most of it was suggested in that pull request. [1]

Would the best way to implement this be to extend ModuleInfo and 
include a getter that   loads the dependencies like 
importedModules(), or should the ctor/dtor stuff be moved to a 
new tables?

Also we might be able to get the compiler to insert a 
cluster_hash that's unique for each compiler run and a 
pre-ordered cluster_index. Then use this to speed up sorting in 
the runtime.

[1] 
https://github.com/dlang/druntime/pull/1602#issuecomment-231527759


More information about the Digitalmars-d mailing list