This is the mail archive of the guile@sources.redhat.com mailing list for the Guile project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Re: continuation and multi-threading


Keisuke Nishida <kxn30@po.cwru.edu> writes:

> Okay, I got it.  So a call of a continuation never returns, right?

Right.

> In that case, I can implement it this way:
> 
>  1. When call-with-current-continuation is called, the VM copies
>     the current stack and registers, and creates a continuation object
>     with them.
> 
>  2. The VM calls a closure with the continuation in the regular way.
> 
>  3. If the closure finishes without calling the continuation,
>     nothing happens.  It continues execution.
> 
>  4. Whenever a continuation is called, the VM throws out the current
>     stack and recovers the stack and registers that the continuation has.
>     It arranges the return value, and then continues execution.
> 
> I think that's it.  Since the VM clears the stack when a continuation
> is called, stack overflow won't happen.  Is that right?

Well, it looks good to me, but then, I haven't studied your VM yet.

Also, in some VM designs, it is possible to do something which is more
efficient than stack copying.

I'll look at your VM as soon as I'm finished with the generic lexical
analyzer.

> If this works, I don't think I have to do anything special - just to
> implement a few additional VM instructions.  Why do I need to break
> the stack into frame objects?

Don't ask me.  :)

> One concern I have is the C stacks that people talk about.  My VM does
> nothing with C functions.

Is your VM using a stack of its own?  In that case, you might have to
take a copy of both stacks.

> I'll look at what Guile does now.

Good.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]