2009-05-02 49 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

相关问题