Lutger wrote:
grauzone wrote:

Lars Ivar Igesund wrote:
Eldar Insafutdinov wrote:

We faced a bug that module static constructors don't work with cyclic
imports. Currently it's fixed with a dirty hack which is not really
acceptable. Is there any chance for this to be fixed?
IMO it is the cyclic import that is the bug ;)
Maybe all cyclic dependency bugs are on purpose, to teach people not to use this evil D feature? Yeah, that must it be. I can't explain why else these bugs/issues aren't fixed, and why people only reply with incredibly useful statements like "but you shouldn't use this feature anyway!".

Broken features should be either fixed or removed. This half-assedness about it isn't really going to help D.

Well it's about cyclic dependency of initialization via module constructors only right? Cyclic imports in general aren't (supposed to be) broken, nor are module constructors.


And in point of fact, you can modify the runtime so it will not throw exceptions on cyclic dependencies:

Index: genobj.d
===================================================================
--- genobj.d    (revision 4339)
+++ genobj.d    (working copy)
@@ -1098,11 +1098,7 @@
         if (m.ctor || m.dtor)
         {
             if (m.flags & MIctorstart)
-            {   if (skip || m.flags & MIstandalone)
-                    continue;
- throw new Exception( "Cyclic dependency in module " ~ (from is null ? "*null*" : from.name) ~ " for import " ~ m.name);
-            }
-
+               continue;
             m.flags |= MIctorstart;
             _moduleCtor2(m,m.importedModules, 0);
             if (m.ctor)

This opens you up to certain bugs, but they should be relatively rare.

I've tried it, and it appears to work.

Reply via email to