我正在考虑像CPS这样的东西,用于基于演员的语言的翻译。
函数参数在变量数组中传递,并且continuation在同一个数组中返回,因此是一个简单的函数
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数组的末尾运行并分配更多空间。
参数是连续的,作为对象的'continuation'只是参数的一个子集。
如果我要实现一流的延续,他们需要克隆参数数组;你也没有免费关闭。主要目标是简单生成机器代码,并允许您暂停和恢复执行。
虽然这个方案的灵感来自于对CPS的思考,但它并不是CPS,并且与积极修剪的C堆栈看起来非常相似 - 只是实时变量,以及每个函数的返回点。
这个样式有名称,特别是参数数组吗?它是一种蹦床+堆栈,虽然我习惯称之为'堆栈'更多的是历史而不是执行的未来。
答案 0 :(得分:2)
这几乎是Forth。拥有一流的堆栈非常类似于延续。