34

私は(一般的に)何shiftreset意味するかを理解していると思います。しかし、なぜ彼らがそのように名付けられたのか分かりませんか? 区切り継続プリミティブは、英語の「シフト」および「リセット」単語と何の関係がshiftありますか?reset

4

2 に答える 2

26

それらは(一般的に)実装されているため、そう呼ばれています。

MinCamlコンパイラでのシフトとリセットの直接実装から引用

継続セマンティクスを使用してプログラムを解釈することにより、プログラムの状態を継続スタックと見なすことができます。次に、継続スタックをマークし、によって作成された最も近いマークまで継続スタックresetをキャプチャすると考えることができます。実装の概要は次のとおりです。shiftreset

  • 呼び出し時、スタックにリセットマーク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 に答える