Re: finding a circular dependency

2010-06-24 Thread Ellery Newcomer

On 06/21/2010 01:51 PM, Steven Schveighoffer wrote:

I've been trying to get a modified version of std.process to compile
(with Lars K's changes) for windows, and phobos finally compiled.

So I built a little test program, compiled it, and I get the following
error message:

object.Exception: circular dependency in module std.stdio.

Great. How did that happen? Being that I didn't write std.stdio, only
modified it slightly (and certainly didn't change any imports), I
haven't the foggiest where this problem is. Given that the runtime can
prove there is a circular dependency, and apparently knows the names of
the modules, how about showing me the cycle?

:P

I do not look forward to tracking this one down...

-Steve



Hey Steve, if you haven't found your cycle yet, could you send me the 
source code? My utility is a bit of a mess, but I think it's working now.


Re: finding a circular dependency

2010-06-24 Thread Steven Schveighoffer
On Thu, 24 Jun 2010 10:27:29 -0400, Ellery Newcomer  
ellery-newco...@utulsa.edu wrote:



On 06/21/2010 01:51 PM, Steven Schveighoffer wrote:

I've been trying to get a modified version of std.process to compile
(with Lars K's changes) for windows, and phobos finally compiled.

So I built a little test program, compiled it, and I get the following
error message:

object.Exception: circular dependency in module std.stdio.

Great. How did that happen? Being that I didn't write std.stdio, only
modified it slightly (and certainly didn't change any imports), I
haven't the foggiest where this problem is. Given that the runtime can
prove there is a circular dependency, and apparently knows the names of
the modules, how about showing me the cycle?

:P

I do not look forward to tracking this one down...

-Steve



Hey Steve, if you haven't found your cycle yet, could you send me the  
source code? My utility is a bit of a mess, but I think it's working now.


I did find it, and I will eventually incorporate my code which prints the  
cycle when it's found (it will be completely non-intrusive and not affect  
the startup performance unless a cycle is found).  However, in trying to  
print the cycle, I've found a really disturbing bug that needs to be  
addressed first http://d.puremagic.com/issues/show_bug.cgi?id=4384


Also, equally disappointing, I found that the reason the cycle was added  
was to workaround a bug in dmd (specifically  
http://d.puremagic.com/issues/show_bug.cgi?id=3979).  Without the code  
that creates the cycle, phobos doesn't compile.  With the code, any  
program linked with phobos fails.  Lovely...


Great, I just gave myself more work when I was trying to just finish  
std.process!


-Steve


Re: finding a circular dependency

2010-06-22 Thread Rory McGuire
On Mon, 21 Jun 2010 20:51:01 +0200, Steven Schveighoffer  
schvei...@yahoo.com wrote:


I've been trying to get a modified version of std.process to compile  
(with Lars K's changes) for windows, and phobos finally compiled.


So I built a little test program, compiled it, and I get the following  
error message:


object.Exception: circular dependency in module std.stdio.

Great.  How did that happen?  Being that I didn't write std.stdio, only  
modified it slightly (and certainly didn't change any imports), I  
haven't the foggiest where this problem is.  Given that the runtime can  
prove there is a circular dependency, and apparently knows the names of  
the modules, how about showing me the cycle?


:P

I do not look forward to tracking this one down...

-Steve


doesn't -verbose list the modules dmd is importing? Perhaps it stops at  
the offending module?


Re: finding a circular dependency

2010-06-22 Thread Steven Schveighoffer
On Tue, 22 Jun 2010 03:14:38 -0400, Rory McGuire rmcgu...@neonova.co.za  
wrote:


On Mon, 21 Jun 2010 20:51:01 +0200, Steven Schveighoffer  
schvei...@yahoo.com wrote:


I've been trying to get a modified version of std.process to compile  
(with Lars K's changes) for windows, and phobos finally compiled.


So I built a little test program, compiled it, and I get the following  
error message:


object.Exception: circular dependency in module std.stdio.

Great.  How did that happen?  Being that I didn't write std.stdio, only  
modified it slightly (and certainly didn't change any imports), I  
haven't the foggiest where this problem is.  Given that the runtime can  
prove there is a circular dependency, and apparently knows the names of  
the modules, how about showing me the cycle?


:P

I do not look forward to tracking this one down...

-Steve


doesn't -verbose list the modules dmd is importing? Perhaps it stops at  
the offending module?


It's a runtime issue, not a compiler issue.

-Steve


Re: finding a circular dependency

2010-06-22 Thread Steven Schveighoffer
On Tue, 22 Jun 2010 05:04:18 -0400, Lars T. Kyllingstad  
pub...@kyllingen.nospamnet wrote:



On Mon, 21 Jun 2010 14:51:01 -0400, Steven Schveighoffer wrote:


I've been trying to get a modified version of std.process to compile
(with Lars K's changes) for windows, and phobos finally compiled.

So I built a little test program, compiled it, and I get the following
error message:

object.Exception: circular dependency in module std.stdio.

Great.  How did that happen?  Being that I didn't write std.stdio, only
modified it slightly (and certainly didn't change any imports), I
haven't the foggiest where this problem is.  Given that the runtime can
prove there is a circular dependency, and apparently knows the names of
the modules, how about showing me the cycle?

:P

I do not look forward to tracking this one down...

-Steve



I think the only places that exception can be thrown are lines 1770 and
1830 of object.d.  Luckily there are a few debug(PRINTF)printf()s
nearby.  You could try building druntime with -debug=PRINTF.  When the
static constructors are run, hopefully you'll see something like

  ...
  module[x] = std.stdio
  ...
  module[y] = module.depending.cyclically.on.stdio
  module[z] = std.stdio
  object.Exception: Cyclic dependency in module std.stdio.


This is a good idea.

I'm going to look at the runtime to see if I can add code that prints the  
cycle only on failure.  I think such code could be invaluable.  I wonder  
if a stack trace would be enough...


-Steve


Re: finding a circular dependency

2010-06-22 Thread Rory McGuire
On Tue, 22 Jun 2010 13:02:53 +0200, Steven Schveighoffer  
schvei...@yahoo.com wrote:


On Tue, 22 Jun 2010 03:14:38 -0400, Rory McGuire  
rmcgu...@neonova.co.za wrote:


On Mon, 21 Jun 2010 20:51:01 +0200, Steven Schveighoffer  
schvei...@yahoo.com wrote:


I've been trying to get a modified version of std.process to compile  
(with Lars K's changes) for windows, and phobos finally compiled.


So I built a little test program, compiled it, and I get the following  
error message:


object.Exception: circular dependency in module std.stdio.

Great.  How did that happen?  Being that I didn't write std.stdio,  
only modified it slightly (and certainly didn't change any imports), I  
haven't the foggiest where this problem is.  Given that the runtime  
can prove there is a circular dependency, and apparently knows the  
names of the modules, how about showing me the cycle?


:P

I do not look forward to tracking this one down...

-Steve


doesn't -verbose list the modules dmd is importing? Perhaps it stops at  
the offending module?


It's a runtime issue, not a compiler issue.

-Steve


Doh! now I remember, its because of the static constructors having a  
specific order (from tdpl).
And it only does construction when you run the app, not when compiling.  
(elaborating on your reply).


Thanks


finding a circular dependency

2010-06-21 Thread Steven Schveighoffer
I've been trying to get a modified version of std.process to compile (with  
Lars K's changes) for windows, and phobos finally compiled.


So I built a little test program, compiled it, and I get the following  
error message:


object.Exception: circular dependency in module std.stdio.

Great.  How did that happen?  Being that I didn't write std.stdio, only  
modified it slightly (and certainly didn't change any imports), I haven't  
the foggiest where this problem is.  Given that the runtime can prove  
there is a circular dependency, and apparently knows the names of the  
modules, how about showing me the cycle?


:P

I do not look forward to tracking this one down...

-Steve


Re: finding a circular dependency

2010-06-21 Thread Ellery Newcomer

On 06/21/2010 01:51 PM, Steven Schveighoffer wrote:

I've been trying to get a modified version of std.process to compile
(with Lars K's changes) for windows, and phobos finally compiled.

So I built a little test program, compiled it, and I get the following
error message:

object.Exception: circular dependency in module std.stdio.

Great. How did that happen? Being that I didn't write std.stdio, only
modified it slightly (and certainly didn't change any imports), I
haven't the foggiest where this problem is. Given that the runtime can
prove there is a circular dependency, and apparently knows the names of
the modules, how about showing me the cycle?

:P

I do not look forward to tracking this one down...

-Steve


A long time ago I wrote a utility that finds these cycles. I'll see if I 
can't kick-start it for D2.


Re: finding a circular dependency

2010-06-21 Thread Robert Jacques
On Mon, 21 Jun 2010 14:51:01 -0400, Steven Schveighoffer  
schvei...@yahoo.com wrote:


I've been trying to get a modified version of std.process to compile  
(with Lars K's changes) for windows, and phobos finally compiled.


So I built a little test program, compiled it, and I get the following  
error message:


object.Exception: circular dependency in module std.stdio.

Great.  How did that happen?  Being that I didn't write std.stdio, only  
modified it slightly (and certainly didn't change any imports), I  
haven't the foggiest where this problem is.  Given that the runtime can  
prove there is a circular dependency, and apparently knows the names of  
the modules, how about showing me the cycle?


:P

I do not look forward to tracking this one down...

-Steve


Templates and particularly type inference (i.e. auto variables and auto  
returns, etc) are common sources of forward reference, etc issues. Also,  
I'd recommend diff-ing the code bases to see exactly what you changed.


Re: finding a circular dependency

2010-06-21 Thread torhu

On 21.06.2010 20:51, Steven Schveighoffer wrote:

I've been trying to get a modified version of std.process to compile (with
Lars K's changes) for windows, and phobos finally compiled.

So I built a little test program, compiled it, and I get the following
error message:

object.Exception: circular dependency in module std.stdio.

Great.  How did that happen?  Being that I didn't write std.stdio, only
modified it slightly (and certainly didn't change any imports), I haven't
the foggiest where this problem is.  Given that the runtime can prove
there is a circular dependency, and apparently knows the names of the
modules, how about showing me the cycle?


Did you add any imports at all?  Try commenting them and any code that 
depends on them out.