2009-02-06 25 views
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棧看起來很相似 - 只是實時變量和每個函數的返回點。

是否有這種風格的名稱,特別是參數數組?這是一種蹦牀+堆棧,雖然我習慣稱爲「堆棧」更多的是歷史,而不是執行的未來。

回答

2

這幾乎是第四。擁有一流的堆棧就像有延續。