2009-05-02 47 views
3

我正在努力理解Continuations的概念(正如在Smalltalk中使用的Seaside一樣)。維基百科的代碼片段說:Continuation(如在Smalltalk中)和中斷(如在彙編程序中)有什麼區別?

」 ......指以一流的延續,這都是概念,讓一個編程語言來保存執行狀態的任何一點,並在稍後返回到該點的能力在程序中...「

這不就是表達一個彙編程序員在編程中斷時會做什麼的另一種方式嗎?還是我完全錯過了這一點!

回答

11

可以將延續視爲正在運行的進程的快照副本。捕獲延續意味着當前進程被複制並放在一邊。之後,代碼繼續正常執行。評估延續意味着當前進程終止,並且複製的進程完全恢復到被捕獲的狀態。通常可以繼續多次繼續。

中斷是更像一個協程,其中有兩個不同的執行線程(應用程序代碼,中斷處理程序),該交織對方。

1

在某些方面它們是相似的。但是,程序本身會調用延續,而中斷通常由計算機上的CPU或設備生成。另外,中斷更像是一個C信號,它只是被調用,然後控制返回到程序。中斷負責保存狀態並在之後恢復。

另外,應該注意的是,你可以很容易地在彙編中實現延續。

2

延續大致相當於setjump/C中跳遠踏板,你可以預期,當你離開它後調用延續(堆棧,標誌,寄存器,指令指針等)的情況下是完好的。所以它類似於軟件中斷調用,除非在處理程序結束並且延續並不隱含之後不必返回(或更準確地說,調用延續)。

+0

聽起來像高級語言的GOTO呢?他們(繼續)良好的做法?我只問,因爲GOTO會引起各種結構性問題。感謝凱文 – KHWP 2009-05-03 07:17:42

+2

事實上,是的,他們有很多像他們做的代碼更難在大多數情況下,遵循意義上的跳轉。他們沒有跳進像命令式語言一個無效的上下文雖然問題。與標籤不同,在實際初始化上下文之前,不能創建延續。 – artificialidiot 2009-05-04 12:15:18

相關問題