我正在考虑在基于角色的语言的解释器中使用类似CPS的东西。
函数参数在一个变量数组中传递,而continuation在同一个数组中返回,因此是一个简单的函数
def add (x,y) => x + y
因此,来自read/eval/loop的调用
print( add(7, 5) )
[&add, x, y, &print, _, &repl, ...]
其中u是写入函数返回值的空插槽。
在执行的下一步,参数变为
[&print, 12, &repl, ...]
然后
[repl, ...]
等等在C中的实现基本上是
for (;;)
args = (args[0].function_pointer)(args);
参数是连续的,作为对象的“continuation”只是参数的子集。
如果我要实现一级continuations,它们需要克隆参数数组;你也不能免费得到闭包。主要目标是能够很好地处理简单的机器代码生成,并允许您暂停和恢复执行。
这个样式,特别是参数数组,有没有名字?这有点像蹦床+堆叠,尽管我习惯于称之为“堆叠”更多的是执行的历史,而不是未来。