[phobos] Proposed feature: print cycle when a module cyclic dependency is detected

Andrei Alexandrescu andrei at erdani.com
Tue Jun 22 11:38:15 PDT 2010


On 06/22/2010 11:24 AM, Steve Schveighoffer wrote:
> Hm... this is turning out to be quite an interesting problem.
>
> I'm thinking a full cycle detection algorithm might be required, like
> Floyd-Warshall, but that's O(n^3), so it would be painful to run on
> the start of every thread.  100 modules == 1,000,000 iterations.

I agree with saving the result of the ordering!

Wouldn't a topological sort suffice for our needs?

For all modules with constructors:

1. Assign r=0 to all modules

2. Assign r=1 to modules that don't depend on other modules. If no such 
modules, fail.

3. For each child of parent modules, assign r+1 to its rank if it's 
zero. If it's not zero and is not r+1, cycle detected.

Then constructor execution will be in increasing order of rank. For 
modules of the same rank the order is not important.

I might be way off :o).


Andrei


More information about the phobos mailing list