2014-01-06 24 views
0

必須重新啓動處理程序爲signal -ed從另一個處理程序,或可以是signal - 直接由檢測到異常情況的代碼?重新啓動處理程序有什麼意義?

如果它必須是signal -ed從一個處理程序中,它爲什麼如此?這似乎是一個不必要的額外步驟。

與常規處理程序相比,重新啓動處理程序的附加值是多少?如果我們完全放棄重新啓動處理程序(但不使用常規處理程序)?對於語言的力量或表達能力會有什麼不同嗎?

回答

1

下面的答案應該採取一粒鹽。這是基於我對"The Dylan Reference Manual"中「條件」一節的理解,但是我從未寫過一行Dylan代碼,甚至沒有閱讀過比上述章節更多的參考手冊。

必須重新啓動處理程序從另一個處理程序中發出信號,還是可以直接通過檢測到異常情況的代碼發出信號?

restartcondition,如圖Figure 11-6 of the reference manual。它可以是signal -ed只要signal語句在語法上有效。沒有特別的機制來爲restart條件安裝處理程序,而不是處理程序的非restart條件(與Common Lisp和R等語言形成對比)。

在信令restart,而不是信令非restart條件的唯一區別是,如果一個restart處理程序是signal從另一處理程序中-ed,處理程序代碼的該詞法遵循signal -ing其餘不會即使restart處理程序返回,也要執行該操作。在這種情況下,執行處理程序的執行,以及執行調用此處理程序的處理程序,並停止並由restart處理程序返回的值成爲每個處理程序返回的值。 (「如果重新啓動處理程序返回一些值,則信號返回這些值,並且調用信號的處理程序也返回它們。來自信令單元的用於發信號通知原始條件的信號的呼叫返回相同的值,並且信令單元按照指示通過這些值。「Restarts/The Dylan Reference Manual)。

這是我不太清楚,如果restart處理程序執行非本地退出所在的單位restart處理程序signal -ed內目標的位置會發生什麼。

與常規處理程序相比,重新啓動處理程序的附加值是多少?如果我們完全放棄重新啓動處理程序(但不使用常規處理程序)?對於語言的力量或表達能力會有什麼不同嗎?

restart機制是,實際上,一個switch語句,其選擇條件是由外部的代碼,其中switch語句定義的函數動態確定。一個restart信號可以通過非restart條件來模擬,但restart機制規定,否則將被按照慣例,以實現類似的功能建立了兩個正式設施:

  1. restart處理後,其返回從另一個處理程序中獲取signal -ed,其他處理程序中的其餘處理程序會自動跳過,並且處理程序返回restart處理程序返回的值。
  2. A restart條件可以通過它的類型正式確定。如果沒有restart類型,則需要遵循一些其他約定,如果期望restart條件是可識別的,例如,爲了將它們列在調試器的恢復菜單中(「一個交互式調試器應該爲用戶提供指示重啓處理程序適用的任何重啓的信號的能力,並且如果條件的恢復協議允許它返回,這可以例如,用名爲「恢復」的菜單完成。「Recovery Protocols/The Dylan Reference Manual
相關問題