Thread overview
[Issue 2457] New: Detecting circular module dependencies at compile time
Nov 15, 2008
d-bugmail
Nov 16, 2008
d-bugmail
Nov 16, 2008
d-bugmail
Nov 17, 2008
d-bugmail
November 15, 2008
http://d.puremagic.com/issues/show_bug.cgi?id=2457

           Summary: Detecting circular module dependencies at compile time
           Product: D
           Version: 1.036
          Platform: PC
        OS/Version: Linux
            Status: NEW
          Severity: enhancement
          Priority: P2
         Component: DMD
        AssignedTo: bugzilla@digitalmars.com
        ReportedBy: dhasenan@gmail.com


I've been getting a lot of runtime errors about circular module dependencies. It'd save me some time if the compiler could detect at least some of these. The runtime doesn't have a chance of giving a reasonable error message, but the compiler could. At the very least, it'd save some time.


-- 

November 16, 2008
http://d.puremagic.com/issues/show_bug.cgi?id=2457





------- Comment #1 from gide@nwawudu.com  2008-11-16 11:08 -------
Without example code it is unlikely that this will get fixed. Add the code which is failing and include the compilation options you are using. Extra points will be awarded for making the failing code as short as possible.


-- 

November 16, 2008
http://d.puremagic.com/issues/show_bug.cgi?id=2457





------- Comment #2 from jarrett.billingsley@gmail.com  2008-11-16 13:54 -------
====[a.d]====
module a;
import b;
static this(){}
void main(){}

====[b.d]====
module b;
import a;
static this(){}

====[Command line]====
$ rebuild a
$ ./a
object.Exception: Cyclic dependency in module a
$

Pretty short.

It makes no sense that the compiler would output an executable that will always cause a runtime error.  The compiler knows that there is a circular module dependency, and should be able to issue an error at compile time.

Note, however, that in this case there _is_ no circular dependency.  Even though the modules are circularly imported and both have static constructors, the static constructors do not depend on the other module.  This _should_ be legal, at least semantically.  That the program issues an error means that the compiler and runtime aren't doing a whole lot of analysis to determine that there is a cyclic dependency.  It's a false positive.


-- 

November 17, 2008
http://d.puremagic.com/issues/show_bug.cgi?id=2457


smjg@iname.com changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |smjg@iname.com




------- Comment #3 from smjg@iname.com  2008-11-16 19:02 -------
An interesting concept.  The only reason I can see for this being a runtime failure is that the module dependencies are analysed at runtime to determine the order in which to run static constructors.  But why?

This process should be in the compile time.  Then not only can it report any circular dependency problems during compilation, but it can also attempt to resolve any apparent circularity by examining what the static constructor itself depends on (directly or indirectly).


--