Compile time function execution...

janderson askme at me.com
Fri Feb 16 00:33:46 PST 2007


Walter Bright wrote:
> janderson wrote:
>> Walter Bright wrote:
>>> Right now, the compiler will fail if the compile time execution 
>>> results in infinite recursion or an infinite loop. I'll have to 
>>> figure out some way to eventually deal with this.
>>
>> Maybe you could allow the user to specify stack size and maximum 
>> iteration per loop/recursion function to the compiler as flags (with 
>> some defaults).   This way the user can up the size if they really 
>> need it.  This would make it a platform thing.  That way a D compiler 
>> could still be made for less powerful systems.
> 
> Whether you tell it to fail at a smaller limit, or it fails by itself at 
> a smaller limit, doesn't make any difference as to whether it runs on a 
> less powerful system or not <g>.
> 
> The C standard has these "minimum translation limits" for all kinds of 
> things - number of lines, chars in a string, expression nesting level, 
> etc. It's all kind of bogus, hearkening back to primitive compilers that 
> actually used fixed array sizes internally (Brand X, 
> who-shall-not-be-named, was notorious for exceeding internal table 
> limits, much to the delight of Zortech's sales staff). The right way to 
> build a compiler is it either runs out of stack or memory, and that's 
> the only limit.
> 
> If your system is too primitive to run the compiler, you use a cross 
> compiler running on a more powerful machine.
> 
> I have thought of just putting a timer in the interpreter - if it runs 
> for more than a minute, assume things have gone terribly awry and quit 
> with a message.

Please don't.  All sorts of things can affect performance it means that 
there is a remote possibility that it will fail one time out of 10. 
This is particularly the case for build machines where they may be doing 
lots of things at once.  If it suddenly fails because of virtual memory 
thrashing or something, the programmer would get sent an annoying 
message "build failed".  If it works then it needs to work every time.

A counter or stack overflow of some sort would be much better.  Even if 
not specifiable by the programmer.

One way to use a timer though would be to display how long each bit 
took.  That way the programmer would be able to figure out how to 
improve compile-time performance.

-Joel



More information about the Digitalmars-d mailing list