1

當實現一種支持所有這些構造的語言時,在我看來,應該有可能將break,continue,return和throw作爲同一事物的方面,沿着從(或者在繼續的情況下執行尾遞歸)返回一行函數進一步調用堆棧,而不一定是當前函數。Unifying break,continue,return and throw

顯然我不會成爲第一個想到這個的人。有沒有人知道這種做法的討論(或開源實現)的任何參考?

+0

你是否正在討論*在引擎蓋下以相同的方式實現*它們,或者明顯地用單一語言構造替換它們? – delnan

+0

實施。儘管我可能最終需要提供延續性作爲一個可見的構造,所以這將是更多的理由來實現其他方面的東西。 – rwallace

回答

3

所有這些東西都可以在first class continuations之上輕鬆實現(例如在Scheme中)。

但我懷疑它可能永遠是最有效的實現,所以迄今爲止最好的方法是將它們全部視爲不同的實體 - break和continue在編譯階段作爲簡單跳轉來解決,返回實現取決於調用約定,throw/catch還應該依賴爲目標平臺定義的調用約定和ABI。

+1

我同意,有一個改進:'return'和'throw'可以通過* one-shot continuations *(aka * escape continuations *)來實現,它可以比完整的continuation更加簡單和便宜。 –