[racket] metacircular interpreter, lexical scope, environment
On Wed, Dec 01, 2010 at 11:22:49PM -0700, Ryan Culpepper wrote:
> Hendrik Boom wrote:
>>
>> Yes, that's the fast way. It can be made faster in a compiler, where
>> you can compile the exact list steps through the chain of frames
>> instead of looking up names at run-time.
>
> It's easy to "compile away" the name lookup even in an interpreter by
> having a pre-pass* replace variable references with their "lexical
> addresses" (see also "rib-cage environment"). That seems to be a very
> common exercise in interpreter-based PL classes.
Yes.
>
> In fact, lexical variables are so easy to analyze that you can try other
> representations too. For example, you can annotate every lambda
> expression with its free lexical variables and create flat closures. But
> beware of variable mutation in that case!
That's why you haave to have a location somewhere that contains the
variable's value, and let your closures point to it.
-- hendrik
>
> Ryan
>
> *Arguably, this is a very small, simple compiler.
Yes. The boundary between compilation and choosing an in-memory
representation for interpretation is vague.