[gambit-list] continuation implementation details

Hendrik Boom 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 
keep going.

I have no idea how efficient this is, but it will keep a lot of 
transient garbage from ever arriving on the real heap.

-- hendrik

> _______________________________________________
> Gambit-list mailing list
> Gambit-list at iro.umontreal.ca
> https://webmail.iro.umontreal.ca/mailman/listinfo/gambit-list




More information about the Gambit-list mailing list