Search code examples
functional-programmingschemeracketcontinuations

Do continuation record the PC and register states?


currently, when I am experimenting the continuation in functional languages, my understanding is that a continuation records the current program counter and register files, and when a continuation is returned, then the PC and the registered files will be restored to the values it has recorded.

So in the following dumb example from Might's blog post,

; right-now : -> moment
(define (right-now)
  (call-with-current-continuation 
   (lambda (cc) 
     (cc cc))))

; go-when : moment -> ...
(define (go-when then)
  (then then))  


; An infinite loop:
(let ((the-beginning (right-now)))
  (display "Hello, world!")
  (newline)
  (go-when the-beginning))  ; here the-beginning continuation passed to go-when, which ultimately will have an continuation applied to an continuation, that returns a continuation, which will cause the the program point resumed to the PC and registers states recorded in it.

I am not sure my understanding right.. Please correct me if you think it is not.....


Solution

  • Program counter and register files are not what the continuation records.

    The best way to describe the meaning of call-with-current-continuation is that it records the program context. For instance, suppose you're evaluating the program

    (+ 3 (f (call-with-current-continuation g)))
    

    In this case, the context of the call-with-current-continuation expression would be

    (+ 3 (f [hole]))
    

    That is, the stuff surrounding the current expression.

    Call-with-current-continuation captures one of these contexts. Invoking a continuation causes the replacement of the current context with the one stored in the continuation.

    The idea of a context is a lot like that of a stack, except that there's nothing special about function calls in contexts.

    This is a very brief treatment. I strongly urge you to take a look at Shriram Krishnamurthi's (free, online) book PLAI, in particular Part VII, for a more detailed and careful look at this topic.