[LLVMdev] Implementing closures and continuations

Eli Friedman eli.friedman at gmail.com
Sat Jun 29 21:53:05 PDT 2013


On Sat, Jun 29, 2013 at 7:51 PM, David Farler <accumulator at icloud.com>wrote:

> Hi all,
>
> In getting to know the LLVM infrastructure, I'm having a hard time finding
> implementation details for closures and continuations.
>
> For closures, I've read comments such as "using a struct" as an
> environment to hold references to free variables, linked lists to
> dictionaries for various scope levels, and even things like "it's just like
> virtual methods". I have a couple of questions regarding codegen,
> especially in the context of a Lispy/Haskell-like language with automatic
> reference counting of immutable objects allocated on the heap.
>
> What needs to be added to Functions during code generation? Is it a really
> just a struct only holding offsets to free variables? Or do symbols need to
> be looked up a kind of scope chain at runtime?
>
> Does adding a JIT complicate codegen of closures in terms of symbol lookup
> in the bundled environment?
>
> Any recommendations for treating functions with no free variables vs
> closures?
>
> Does implementing continuations greatly affect implementations of
> closures? I assume the stack would need to be heap-allocated explicitly,
> which might affect how pointers would be saved in a bundled environment.
>

Please read http://llvm.org/docs/tutorial/index.html .  I'm having trouble
coming up with answers to most of your questions.

If you need completely general continuations, yes, you'll want to
explicitly allocate your stack.

-Eli
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20130629/1581eeab/attachment.html>


More information about the llvm-dev mailing list