私は(一般的に)何shift
をreset
意味するかを理解していると思います。しかし、なぜ彼らがそのように名付けられたのか分かりませんか? 区切り継続プリミティブは、英語の「シフト」および「リセット」単語と何の関係がshift
ありますか?reset
質問する
1993 次
2 に答える
26
それらは(一般的に)実装されているため、そう呼ばれています。
MinCamlコンパイラでのシフトとリセットの直接実装から引用
継続セマンティクスを使用してプログラムを解釈することにより、プログラムの状態を継続スタックと見なすことができます。次に、継続スタックをマークし、によって作成された最も近いマークまで継続スタック
reset
をキャプチャすると考えることができます。実装の概要は次のとおりです。shift
reset
- 呼び出し時、スタックにリセットマーク
reset
をセット- を呼び出すとき
shift
(fun k -> M)
、スタック フレームの一部をヒープに最も近いリセット マークまで移動します。- continuation を呼び出すときは、スタックにリセット マーク
k
を設定し、対応するフレームをヒープからスタック トップにコピーします。が呼び出されると、リセット マークが挿入さ
k
れます。これは、キャプチャされた継続が空の継続で実行されるためです。
于 2011-05-13T11:06:45.163 に答える
5
それは、Danvy と Filinskiが継続渡しスタイルのモデルを公開した最初の論文でこれら 2 つの演算子を呼んだ方法であり (こちらも参照)、Scala が実装しているものです。
Scala での実装については、この別の論文で説明されています。その中の Danvy & Filinski への言及は明らかです。
この論文では、この言語フレームワークへの制御演算子 shift および reset の追加を検討します。これらは一緒に静的区切り継続を実装します (Danvy and Filinski 1990, 1992)。
于 2011-07-09T07:49:18.247 に答える