Error Handling
Rust 的錯誤大致分為兩種主要的種類, recoverable 和 unrecoverable ,對於 recoverable errors 例如找不到對應檔案,最有可能的處理方式是回報該問題並且重新嘗試該操作,對於 unrecoverable error 來說,那總是代表 bugs 的特徵,此情況會立即將程式停止。
panic! macro
實際上有兩種方式來造成 panic ,一種是做了某些造成整個程式 panic 的操作例如嘗試存取超過 array 範圍的記憶體空間,或者是我們自行呼叫 panic! macro 。
不管是哪種方式,這些 panics 都會回傳一個錯誤訊息然後 unwind ,之後清空 stack 然後結束程式。
預設來說當 panic 發生時程式會自動開始 unwind ,代表 Rust 會從尾部走回到 stack 頭部並清空所有函式當中使用的資料,但這樣的 walking 成本昂貴,因此 Rust 提供另一個機制稱為 aborting ,會直接將程式終止而不會 clean up 。
至於程式原本使用的記憶體資源則會交給作業系統來清除,如果你寫出的程式最後編譯的 binaries 非常小,則我們可以從 unwinding 改成 aborting ,透過 panic = 'abort' 在 Cargo.toml 檔案當中。