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