如何实现continuations?

54

我正在开发一个用C语言编写的Scheme解析器。目前,它使用C运行时栈作为自己的栈,这在实现continuations时会出现一些小问题。我目前的解决方案是手动将C堆栈复制到堆上,然后在需要时再将其复制回来。除了不符合标准C之外,这个解决方案也远非理想。

在C语言中,如何最简单地实现Scheme的continuations?

12个回答

1

使用显式栈代替。


4
“明确的堆栈”是什么?它是一个模拟堆栈的堆分配数据结构吗?还是一个模拟堆栈使用历史记录的堆分配数据结构?它与问题的相关性是什么? - Charles Stewart

1
Patrick是正确的,你真正能做到这一点的唯一方法就是在你的解释器中使用一个显式的堆栈,并在需要转换为续延时将适当的堆栈段提升到堆中。
这基本上与支持支持它们的语言中的闭包所需的内容相同(闭包和续延有些相关)。

不过,为了支持闭包,你可以简单地进行 lambda lifting,不是吗? - apg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接