3

我正在努力理解延续的概念(在 Seaside with Smalltalk 中使用)。维基百科的一个片段说:

“......指的是一流的延续,它是使编程语言能够在任何时候保存执行状态并在程序中稍后返回到该点的结构......”

这难道不是另一种表达汇编程序员在编写中断时会做什么的方式吗?还是我完全错过了重点!

4

3 回答 3

12

延续可以被视为正在运行的进程的快照副本。捕获延续意味着当前进程被复制并放在一边。之后,代码继续正常执行。评估一个延续意味着当前进程被终止,并且复制的进程被恢复到它被捕获的状态。延续通常可以恢复多次。

中断更像是一个协程,其中有两个不同的执行线程(应用程序代码、中断处理程序)相互交错。

于 2009-05-07T05:53:41.770 回答
3

延续大致相当于 C 中的 setjump/longjump。离开后调用延续(堆栈、标志、寄存器、指令指针等)时,您可以期望上下文保持不变。所以它类似于软件中断调用,除了你不必在处理程序完成后返回(或更准确地说,调用延续)并且延续不是隐式的。

于 2009-05-02T23:23:32.960 回答
1

在某些方面,它们是相似的。但是,延续由程序本身调用,中断通常由计算机上的 CPU 或设备生成。此外,中断更像是一个 C 信号,它只是被调用,然后控制权返回给程序。中断负责保存状态并在之后恢复它。

另外,应该注意的是,您可以很容易地在汇编程序中实现延续。

于 2009-05-02T19:28:16.020 回答