3

我正在考虑将 CPS 之类的东西用于基于演员的语言的解释器中。

函数参数在变量数组中传递,延续在同一个数组中返回,所以一个简单的函数

def add (x,y) => x + y

所以来自 read/eval/loop 的调用将是

print( add(7, 5) )

入境时会是

[&add, x, y, &print, _, &repl, ...]

其中 _ 是写入函数返回值的空槽。

在执行的下一步,参数变为

[&print, 12, &repl, ...]

然后

[repl, ...]

等等。C中的实现基本上是

for (;;)
   args = (args[0].function_pointer)(args);

检查是否超出 args 数组的末尾并分配更多空间。

参数是连续的,作为对象的“延续”只是参数的一个子集。

如果我要实现一流的延续,他们将需要克隆参数数组;您也不会免费获得关闭。主要目标是与简单的机器代码生成配合得很好,并让您暂停和恢复执行。

虽然这个方案的灵感来自于对 CPS 的思考,但它并不完全是 CPS,并且非常类似于经过积极修剪的 C 堆栈可能看起来的样子——只是活动变量和每个函数的返回点。

这种风格有名字吗,特别是参数数组?这是一种蹦床+一个堆栈,尽管我习惯于调用“堆栈”更多的是历史而不是执行的未来。

4

1 回答 1

2

这几乎是Forth。拥有一流的堆栈就像拥有延续一样。

于 2009-12-03T22:36:57.543 回答