鸚鵡虛擬機器/異常子系統
外觀
< 鸚鵡虛擬機器
異常處理已成為大多數現代程式語言中的基本功能。鸚鵡,因為它旨在託管許多這樣的語言,必須支援一個強大的異常系統。鸚鵡不僅使用異常進行錯誤處理和恢復,而且還鼓勵使用控制流異常來實現這些語言的高階控制流功能。這意味著異常子系統是語言實現者必須熟悉的最重要的子系統之一。
鸚鵡的異常系統目前正在重新實現,使其更強大、可擴充套件、內部一致和健壯。本頁中的一些資訊可能已過時。 |
異常被分解為兩個主要部分:異常物件和異常處理程式。異常處理程式在許多方面類似於子例程,必須在使用前專門在鸚鵡中註冊。當鸚鵡檢測到錯誤時,它會透過包含有關錯誤的資訊、當前控制流狀態的延續以及其他一些資訊來建立一個異常物件。異常,就像鸚鵡中的大多數其他東西一樣,是 PMC,可以像其他 PMC 一樣儲存、操作和使用。
建立異常物件後,鸚鵡會檢視其處理程式列表,並將異常物件傳遞給每個處理程式。處理程式儲存在類似於堆疊的結構中,最近註冊的處理程式將首先訪問異常物件。處理程式可以執行以下幾種操作之一。首先,它可以處理異常:它可以修復錯誤,呼叫異常物件中的返回延續,並將控制流返回到發生錯誤之前的狀態。其次,它可以重新丟擲異常,將其傳遞給堆疊中的下一個處理程式。第三,它可以忽略異常。被忽略或沒有可用的處理程式的異常會導致鸚鵡退出。