継続(Smalltalkなど)と割り込み(アセンブラーなど)の違いは何ですか?
-
03-07-2019 - |
質問
Continuationsの概念(Seaside with Smalltalkで使用されている)を理解するのに苦労しています。ウィキペディアのスニペットには次のように書かれています:
" ...ファーストクラスの継続を参照します。これは、プログラミング言語に、任意の時点で実行状態を保存し、プログラム内の後の時点でその時点に戻る機能を提供します... ''
これは、割り込みをプログラミングするときにアセンブラプログラマが行うことを表現する別の方法ではありませんか?または、ポイントを完全に見逃してしまいました!
解決
継続は、実行中のプロセスのスナップショットコピーと見なすことができます。継続をキャプチャするとは、現在のプロセスがコピーされて破棄されることを意味します。その後、コードは正常に実行され続けます。継続の評価とは、現在のプロセスが終了し、コピーされたプロセスがキャプチャされた状態で再開されることを意味します。通常、継続は複数回再開できます。
割り込みはコルーチンに似ており、相互にインターリーブする2つの異なる実行スレッド(アプリケーションコード、割り込みハンドラー)があります。
他のヒント
継続はCのsetjump / longjumpとほぼ同じです。コンテキスト(スタック、フラグ、レジスタ、命令ポインタなど)を終了した後、コンテキストを呼び出すと、コンテキストが損なわれないことが期待できます。したがって、ハンドラーが終了し、継続が暗黙的ではない後に戻る(または、より正確には継続を呼び出す)必要がないことを除いて、ソフトウェア割り込み呼び出しに似ています。
いくつかの点で似ています。ただし、継続はプログラム自体によって呼び出され、通常、割り込みはコンピューター上のCPUまたはデバイスによって生成されます。また、割り込みはC信号に似ており、単に呼び出され、プログラムに制御が戻ります。割り込みは、状態を保存して後で復元する役割を果たします。
また、アセンブラーで継続を非常に簡単に実装できることに注意してください。