QtD 0.1 is out!

Christopher Wright dhasenan at gmail.com
Sat Feb 28 05:54:26 PST 2009


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.


More information about the Digitalmars-d-announce mailing list