Re: recursive nested functions

"BGB / cr88192" <>
Mon, 28 Jun 2010 17:17:24 -0700

          From comp.compilers

Related articles
recursive nested functions (nojb) (2010-06-25)
Re: recursive nested functions (Chris F Clark) (2010-06-27)
Re: recursive nested functions (Gene) (2010-06-27)
Re: recursive nested functions (BGB / cr88192) (2010-06-28)
| List of all articles for this month |

From: "BGB / cr88192" <>
Newsgroups: comp.compilers
Date: Mon, 28 Jun 2010 17:17:24 -0700
References: 10-06-078 10-06-087
Keywords: analysis, optimize
Posted-Date: 29 Jun 2010 11:11:15 EDT

"Gene" <> wrote in message
> On Jun 25, 1:30 pm, nojb <> wrote:


> Check the literature on lambda lifting. Although the theory was
> worked out for functional languages, it works for imperative ones,
> too. You need to pass references around rather than values. Function
> pointers generally need to be "fat" i.e. to include references to all
> bound variables.

one doesn't necessarily need fat pointers.
for example, one typical architectures, such as x86, one can instead pass
around a function pointer to an in-memory object, which when called may in
turn call the true function passing the captured variables in addition to
the arguments.

this has the advantage that it can remain C ABI compatible.

> I'm not sure of the problem you are describing. It sounds like you
> are confusing dynamic and static scopes. Lambda lifting makes sense
> only in the context of static scopes. A function F that declares a
> variable X will still declare X in the lifted code. Calls to a
> function G originally nested within F will pass X (or a reference to
> it), and G will accept the reference. If G calls itself recursively,
> it passes the same reference to X it received. Same if it calls a
> nested function H that ultimately calls G.

yeah, I didn't respond originally as I couldn't make much sense of what was
being asked.

I thought mayve something different was being asked, and so left it to
others to try to respond.

Post a followup to this message

Return to the comp.compilers page.
Search the comp.compilers archives again.