[gambit-list] continuation implementation details
hendrik at topoi.pooq.com
Wed Jun 8 17:35:08 EDT 2011
On Wed, Jun 08, 2011 at 04:15:21PM -0500, Jason E. Aten wrote:
> (sorry for duplicate post, changing the title to be accurate here...)
> On Wed, Jun 8, 2011 at 4:14 PM, Jason E. Aten <j.e.aten at gmail.com> wrote:
> > Hi Marc,
> > I was wondering if there is a write-up of the details of how Gambit
> > implements first-class continuations?
> > I'm writing a little language for research purposes, but I'm not sure how
> > to do continuations efficiently, and the Inside-out slides whetted my
> > appetite, but I couldn't grok it fully from them.
> > If others on the list have pointers to papers as well, I'd enjoy reading
> > about the best thoughts on how to implement continuations.
> > Thanks!
> > Jason
One hack -- Just let your C functions keep calling and never returning.
When it's time too return, call the continuation as you'd expect.
You'll never see old stack frames again unless they contain data you
need to point to. Even cons will just give you stack storage, fill it
in, and call the continuation with a pointer to the consed cell.
Of course, the stack will get rather big.
So, now and then, test whether the stack is too big, and if it is, do a
copying garbage collection. If it's generational, treat the stack as
the newest generation. Anything you still need to access on the stack
gets copied to the heap. THen do a longjump to clear off the stack and
I have no idea how efficient this is, but it will keep a lot of
transient garbage from ever arriving on the real heap.
> Gambit-list mailing list
> Gambit-list at iro.umontreal.ca
More information about the Gambit-list