Debugging CTFE

Matthias Walter Matthias.Walter at st.ovgu.de
Thu Jun 19 02:59:59 PDT 2008


Don Wrote:

> Jarrett Billingsley wrote:
> > "Matthias Walter" <Matthias.Walter at st.ovgu.de> wrote in message 
> > news:g38na9$2gs7$1 at digitalmars.com...
> >> Hello,
> >>
> >> I have written some compile time executable functions with D 1.0 which 
> >> work in runtime but hang (and allocate memory without end) at 
> >> compile-time. Is there a way to debug this further? Can one print stuff 
> >> out? (Don't know if writefln works at compile-time, as I'm using Tango) 
> >> Can I somehow get a stack trace of the functions called?
> >>
> > 
> > No, no, and no.  CTFE support in the current frontend has some rather 
> > unworkable disadvantages.  For one, it's terribly buggy.You're better off 
> > trying to convert it to templates in most cases.
> 
> I disagree. I've not had much trouble with CTFE. The really, really nice 
> thing about CTFE is that you can write it as a runtime function, and 
> make sure it works before using it a compile time.
> 
> The problem with CTFE is bugzilla issue #1382 (no memory release for 
> CTFE functions)...
> 
> For two, CTFE is
> > interpreting a garbage-collected language but is not itself 
> > garbage-collected, meaning that memory-unconscious code evaluated at compile 
> > time (i.e. a loop that appends data to the end of a string) will just leak 
> > like hell and cause the compiler to easily use up several GB of memory. 
> > That might be what's happening to your code.
> 
> That's very likely. The maximum size of code you can write with CTFE is 
> pretty small.
> 
> >  Or it could be a bug in CTFE. 
> 
> Bugzilla issue #1382 is the killer. One of the most important bugs in 
> bugzilla, I reckon.

But in my case, the runtime-function needed some milliseconds, allocating not more than 1 MB data. the compiler then allocated 1 GB until I killed the process. I guess, there might be some other bugs. Unfortunatly, I was unable to make proofing code more easy to get the cause of the bug.

Anyway, I now don't use functions for much stuff, but try to achieve my needs with templates, although template programming is sometimes a bit messier. But it works and debugging via pragmas is like printf-debugging in C and thus just a matter of time :) Training more functional thinking is also helpful for other things...

best regards and thanks for the tips
Matthias


More information about the Digitalmars-d-learn mailing list