Паніки

Rust обробляє фатальні помилки з "panic".

Rust викличе паніку, якщо під час виконання станеться фатальна помилка:

fn main() {
    let v = vec![10, 20, 30];
    println!("v[100]: {}", v[100]);
}
  • Паніки – це невиправні та несподівані помилки.
    • Паніки є ознакою помилок у програмі.
    • Збої у виконанні, такі як невдалі перевірки меж, можуть викликати паніку
    • Твердження (наприклад, assert!) панікують у разі невдачі
    • Для спеціальних панік можна використовувати макрос panic!.
  • Паніка "розмотує" стек, відкидаючи значення так, як якщо б функції повернулися.
  • Використовуйте API, що не викликають паніки (такі як Vec::get), якщо збій неприйнятний.
This slide should take about 3 minutes.

За замовчуванням паніка призведе до розмотування стека. Розмотування можна зловити:

use std::panic;

fn main() {
    let result = panic::catch_unwind(|| "Ніяких проблем!");
    println!("{result:?}");

    let result = panic::catch_unwind(|| {
        panic!("о, ні!");
    });
    println!("{result:?}");
}
  • Перехоплення є незвичайним; не намагайтеся реалізувати виключення за допомогою catch_unwind!
  • Це може бути корисним на серверах, які повинні продовжувати працювати навіть у разі збою одного запиту.
  • Це не працює, якщо у вашому Cargo.toml встановлено panic = 'abort'.