延续传递风格VS积极修剪调用堆栈?
-
22-08-2019 - |
题
我在考虑像CPS用在解释了一个演员为基础的语言。
该函数参数被传递在变体的阵列,并继续在相同阵列中返回,所以一个简单的功能
def add (x,y) => x + y
所以从读/ EVAL /回路的呼叫将是
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堆栈可能看起来像 - 只有生存变量,并返回每个功能点。
是否有这种风格的名称,特别是参数数组?这有点蹦床+堆栈,虽然我已经习惯了叫“堆”更多的是历史,而不是执行的未来。
解决方案
这是几乎等。具有第一级堆叠是非常喜欢具有延续。
不隶属于 StackOverflow