Related articles |
---|
Implementing Closures andrew@tomazos.com (Andrew Tomazos) (2009-04-24) |
Re: Implementing Closures armelasselin@hotmail.com (Armel) (2009-04-24) |
Re: Implementing Closures dot@dotat.at (Tony Finch) (2009-04-26) |
Re: Implementing Closures barry.j.kelly@gmail.com (Barry Kelly) (2009-04-26) |
Re: Implementing Closures cr88192@hotmail.com (cr88192) (2009-04-26) |
Re: Implementing Closures torbenm@pc-003.diku.dk (2009-04-28) |
Re: Implementing Closures pertti.kellomaki@tut.fi (Pertti Kellomaki) (2009-04-29) |
Re: Implementing Closures torbenm@pc-003.diku.dk (2009-04-29) |
Re: Implementing Closures dot@dotat.at (Tony Finch) (2009-04-29) |
[3 later articles] |
From: | Tony Finch <dot@dotat.at> |
Newsgroups: | comp.compilers |
Date: | 26 Apr 2009 01:15:58 +0100 (BST) |
Organization: | dotat labs |
References: | 09-04-056 |
Keywords: | storage, interpreter |
Posted-Date: | 27 Apr 2009 05:54:45 EDT |
X-Attribution: | fanf hates supercite |
Andrew Tomazos <andrew@tomazos.com> wrote:
>
>What are some of the approaches a compiler author could use to
>implement such a language feature?
The Lua interpreter has an interesting implementation. See
http://www.tecgraf.puc-rio.br/~lhf/ftp/doc/jucs05.pdf
>[This issue is well understood in the Lisp community. You basically need
>to implement the activation records in a heap and garbage collect them,
>keeping them live as long as there are any references to the closure. If
>the closure can refer to variables in enclosing scopes, you need to keep
>those scopes active as well, in what's known as a spaghetti or cactus
>stack. -John]
A naive implementation of this technique is vulnerable to nasty space
leaks. For example, function foo's activation frame contains a
reference to a large data structure. Foo returns an inner function bar
whose closure refers to a small variable in foo's activation frame. If
bar's closure keeps foo's whole activation frame live, instead of just
the small variable, then the garbage collector will not reclaim the
large data structure. Andrew Appel's book "Compiling With
Continuations" discusses various optimisations for closure
represenation.
Tony.
--
f.anthony.n.finch <dot@dotat.at> http://dotat.at/
ROCKALL: SOUTHWESTERLY 5 TO 7, OCCASIONALLY GALE 8 IN NORTH. ROUGH OR VERY
ROUGH, OCCASIONALLY HIGH IN NORTH. SQUALLY SHOWERS. MODERATE OR GOOD.
Return to the
comp.compilers page.
Search the
comp.compilers archives again.