本系列錄制的視訊主要放在B站上Rust死靈書學習視訊
Rust分層的錯誤處理體系
- 有些值可以為空,則使用Option;
- 如果發生了錯誤,而錯誤可以被正常處理,用Result;
- 如果發生了錯誤,但是沒辦法正常處理,就讓線程Panic;
- 如果發生了更嚴重的問題,則終止(abort)程式。
- 捕獲panic:catch_panic可以在不啟動一個線程的情況下捕獲panic,示例如下:
use std::panic;
fn main() {
let result = panic::catch_unwind(|| {
println!("hello!");
});
assert!(result.is_ok());
let result = panic::catch_unwind(|| {
panic!("oh no!");
});
assert!(result.is_err());
println!("Hello, world!");
}
- Rust的展開方式沒有試圖和其它語言的展開方式相容,是以,從其它語言展開Rust的棧或者從Rust展開其它語言的棧,屬于未定義行為。是以必須在進入FFI之前捕獲所有的Panic!