代码之家  ›  专栏  ›  技术社区  ›  Pete Kirkham

继续传递样式与积极修剪调用堆栈?

  •  3
  • Pete Kirkham  · 技术社区  · 17 年前

    我正在考虑在基于角色的语言的解释器中使用类似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,它们需要克隆参数数组;你也不能免费得到闭包。主要目标是能够很好地处理简单的机器代码生成,并允许您暂停和恢复执行。

    这个样式,特别是参数数组,有没有名字?这有点像蹦床+堆叠,尽管我习惯于称之为“堆叠”更多的是执行的历史,而不是未来。

    1 回复  |  直到 17 年前
        1
  •  2
  •   vsedach    16 年前

    这就快到了。拥有一个一流的堆栈与拥有continuations非常相似。

    推荐文章