天天看點

020 Rust死靈書之展開

本系列錄制的視訊主要放在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!