3
我正在考慮像CPS這樣的解釋器中使用的基於演員的語言。繼續傳遞樣式vs積極修剪調用堆棧?
參數在變體的陣列中傳遞的功能,並且在相同陣列中返回的延續,所以一個簡單的函數
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棧看起來很相似 - 只是實時變量和每個函數的返回點。
是否有這種風格的名稱,特別是參數數組?這是一種蹦牀+堆棧,雖然我習慣稱爲「堆棧」更多的是歷史,而不是執行的未來。