[bitc-dev] CLEANUP: specification of DEFINE

Jonathan S. Shapiro shap at eros-os.com
Thu Jul 17 17:03:20 CDT 2008


On Thu, 2008-07-17 at 17:19 -0400, Swaroop Sridhar wrote:
> > Good! How much problem do you anticipate with implementing the
> > change? :-)
> 
> This is not hard to implement, but re-writing the
> (define (f x) <body>) as
> 
> (define f (letrec ((f (lambda (x) <body>))) f))
> 
> where body actually uses `f' will introduce closure construction for the
> lambda being bound, since the lambda is now capturing a non-global
> non-local variable `f'.
> 
> I guess we can recognize this case by hand, but I wanted to note the
> issue.

Don't we already recognize self-recursion as a special case?

In any case, the rewrite specification was intended as a specification
of semantics, not a specification of the intended implementation. This
definitely should NOT induce a closure construction.

I tend to think that we should handle (recognize) the self-binding case
specially in any case.


shap



More information about the bitc-dev mailing list