我正在考虑将 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 堆栈可能看起来的样子——只是活动变量和每个函数的返回点。
这种风格有名字吗,特别是参数数组?这是一种蹦床+一个堆栈,尽管我习惯于调用“堆栈”更多的是历史而不是执行的未来。