2009-05-02 6 views
3

私はContinuationsの概念を理解するのに苦労しています(Seatide with Smalltalkで使用されています)。ウィキペディアからの抜粋は言う:継続(Smalltalkのように)と割り込み(アセンブラのように)の違いは何ですか?

」...プログラミング言語に任意の時点で実行状態を保存し、後の時点で、その点に復帰する能力を与える構築物でファーストクラスの継続、を参照してください。プログラム内で... "

これは、割り込みをプログラミングするときにアセンブラプログラマが何をするかを表現する単純な方法ではありませんか?または、私は完全にその点を逃したのですか?

答えて

11

継続は、実行中のプロセスのスナップショットコピーと見ることができます。継続をキャプチャするとは、現在のプロセスがコピーされて脇に置かれていることを意味します。その後、コードは正常に実行され続けます。継続を評価するということは、現在のプロセスが終了し、コピーされたプロセスがキャプチャされた状態で再開されることを意味します。継続は、通常、複数回再開することができます。

割り込みは、相互にインターリーブする2つの異なる実行スレッド(アプリケーションコード、割り込みハンドラ)があるコルーチンのようなものです。

+0

継続の非常に明確な説明。 –

1

いくつかの点で似ています。ただし、継続はプログラム自体によって呼び出され、割り込みは通常、CPUまたはコンピュータ上のデバイスによって生成されます。また、割り込みはC信号によく似ており、呼び出されただけで制御がプログラムに戻ります。割り込みは、状態を保存して後で復元する役割を担います。

また、アセンブラで非常に簡単にコンプリートを実装できることに注意してください。

2

継続はCのsetjump/longjumpとおおよそ同等です。継続(スタック、フラグ、レジスタ、命令ポインタなど)を終了した後でコンテキストが元の状態になることが期待できます。したがって、ハンドラが終了して継続が暗黙的に行われた後に、返す必要はない(またはより正確には、継続を呼び出す)ことを除いて、ソフトウェア割り込み呼び出しに似ています。

+0

高音域のGOTOのような音ですか?彼らは(継続)良い練習ですか?私はGOTOがあらゆる種類の構造上の問題を引き起こす可能性があるので尋ねるだけです。ありがとうKevin – KHWP

+2

実際、ほとんどの場合、コードを難しくするという意味で、gotoのようなものです。彼らは命令的言語のような無効な文脈に飛び込むという問題はない。ラベルとは異なり、実際にコンテキストを初期化する前に継続を作成することはできません。 – artificialidiot

関連する問題