Cycle detected between modules with ctors/dtors

rumbu via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Wed Mar 4 13:15:14 PST 2015


On Wednesday, 4 March 2015 at 16:08:00 UTC, Steven Schveighoffer 
wrote:

>
> curiously not listed? That doesn't make any sense. If there is 
> not a cycle in the listed modules, where at least 2 modules 
> have a static ctor or static dtor, then there is a bug in the 
> cycle detection code.

Source code is available here: https://github.com/rumbu13/sharp

The runtime error chain was "system.globalization -> 
internals.locale ->
system.runtime.interopservices -> system.io ->
system.globalization

Three of these modules import "internals.resources" containing a 
static constructor. The static dtor is in 
system.runtime.interopservices.

> Clearly, the above is not an issue, but at the moment, the code 
> treats having a ctor and having a dtor as the same thing. How 
> to fix it? I'm not exactly sure, you need to have the modules 
> sorted according to ctor and also according to dtor. The 
> runtime is supposed to run dtors in reverse order from ctor 
> calls, and I think we should not break that. But there is 
> definitely room to allow for reordering when ctors are not 
> affected.
>
> I'll have to think about it some more.
>
> -Steve

Why bother? I'll leave this to the programmer, he can take full 
responsibility to not mess up module ctors/dtors. I remember the 
old Delphi days where this was assumed from the start: 
initialization and finalization order of execution (equivalent of 
static ctor/dtor) were not guaranteed. It was better to obtain an 
AccessViolation or a StackOverflow and correct the circular 
reference, instead of a NEVER running executable.



More information about the Digitalmars-d-learn mailing list