豊福@パパイヤです。

  「継続」には「時間を止められる超能力者」みたいなイメージを
持ちました。

まつもとさん
> continuationに保存される状態は
>   ローカル変数の値
>   スタックフレーム
> だけです.この場合の「値」は「どのオブジェクトか」ということ
> で,「指してるオブジェクトの状態」ではないです.

原さん
> $n = 0
> k = 0
> for i in 0..2
>   callcc { |c| $cont = c } if i == 0
>   printf("%d) i = %d, k = %d\n", $n, i, k)
> end
> k += 1
> exit if ($n+=1) == 2
> print "Jump!\n"
> $cont.call
> 
> の結果は
> 
> 0) i = 0, k = 0
> 0) i = 1, k = 0
> 0) i = 2, k = 0
> Jump!
> 1) i = 2, k = 1
> 1) i = 1, k = 1
> 1) i = 2, k = 1

  以下、話を簡単にするためにローカル変数もスタックに置くと
仮定します。

  上の結果から

「スタックの深い方へ継続するときはジャンプ前のスタックポインタ
からジャンプ後のスタックポインタまでの差分分のスタックだけを
復活して継続する。上の例では (0..2) の eachメソッドのスコープ
に関するスタック(ループカウンタがここに入る)だけが復活した
ので、ループカウンタの値だけが callcc時の値(つまりループの
1回目)に戻った。」

と想像したのですがあってるでしょうか。
---
                        豊福@パパイヤ
                        unbound / papaya.juice.or.jp
                        toyofuku / juice.or.jp