[Openmcl-devel] Compiler infinite loop
Pascal J. Bourguignon
pjb at informatimago.com
Mon Sep 20 09:04:53 UTC 2010
Gary Byers <gb at clozure.com> writes:
> Having a symbol-macro (or any other kind of macro) expand into itself
> will obviously lead to infinite recursion. The condition that gets
> raised in some implementations is due to the fact that this infinite
> recursion exhausts the stack (not because they've otherwise tried to
> solve the halting probkem); in other implementations, tail-call
> optimization makes it equivalent to an infinite loop.
> I'm not really sympathetic to the notion that - all other things being
> equal - symbol-macroxpansion should consume stack space unnecessarily,
> so that someone who writes an infinitely recursive symbol macro won't
> be "bitten" by that hanging instead of stack overflowing as they (for
> some unknown reason) appear to expect. I'm much more sympathetic to
> the general idea that deeply recursive things should run in bounded
> stack space if that's at all possible.
Symbol macrolets don't take a parameter. Their expansions are constant.
For this reason, I think that it would be nice of the implementation
to detect symbol macrolet loops.
There could also be a hidden loop going thru several symbol macrolets,
so the pathological case:
(symbol-macrolet ((test test)) test)
could actually be:
(symbol-macrolet ((test another-variable)) test)
__Pascal Bourguignon__ http://www.informatimago.com/
More information about the Openmcl-devel