Я рассматриваю что-то вроде CPS для использования в интерпретаторе для актерского языка.
Аргументы функции передаются в виде массива вариантов, а продолжение возвращается в том же массиве, поэтому простая функция
def add (x,y) => x + y
так что вызов из цикла read / 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 - только живые переменные и точки возврата для каждой функции.
Есть ли имя для этого стиля, и в частности массив аргументов? Это своего рода батуты + стек, хотя то, что я привык называть «стеком», - это скорее история, а не будущее выполнения.