儘量不要驚慌

在 Rust 中,有兩種主要方法可以指示某個程式出錯:一個函式返回一個( 可能是自定義的Err(E),來自 Result<T, E>型別和 panic!

恐慌不是異常的替代方案,常見於其他語言。在 Rust 中,恐慌是指出某些事情已經嚴重錯誤並且無法繼續。以下是 pushVec 原始碼示例:

pub fn push(&mut self, value: T) {
    // This will panic or abort if we would allocate > isize::MAX bytes
    // or if the length increment would overflow for zero-sized types.
    if self.len == self.buf.cap() {
        self.buf.double();
    }
    ...
}

如果我們記憶體不足,那麼 Rust 可以做的事情就不多了,所以它會出現恐慌(預設行為)或中止(需要使用編譯標誌設定)。

恐慌將展開堆疊,執行解構函式並確保清理記憶體。Abort 不會這樣做,並依賴作業系統來正確清理它。

嘗試正常執行以下程式,並使用

[profile.dev]
panic = "abort"

在你的 Cargo.toml

// main.rs
struct Foo(i32);
impl Drop for Foo {
    fn drop(&mut self) {
        println!("Dropping {:?}!", self.0);
    }
}
fn main() {
    let foo = Foo(1);
    panic!("Aaaaaaahhhhh!");
}