PĂąnicos (Panics)

Rust lida com erros fatais com um “pñnico”.

O Rust irå disparar um panic (pùnico) se um erro fatal ocorrer em tempo de execução:

fn main() {
    let v = vec![10, 20, 30];
    println!("v[100]: {}", v[100]);
}
  • PĂąnicos sĂŁo para erros irrecuperĂĄveis e inesperados.
    • PĂąnicos sĂŁo sintomas de bugs no programa.
    • Falhas em tempo de execução como verificaçÔes de limites falhadas podem disparar um pĂąnico
    • AsserçÔes (como assert!) disparam um pĂąnico em caso de falha
    • PĂąnicos com moticos especĂ­ficos podem usar a macro panic!.
  • Um pĂąnico irĂĄ “desenrolar” a pilha, descartando valores como se as funçÔes tivessem retornado.
  • Use APIs que nĂŁo disparam erros do tipo pĂąnico (como Vec::get) se nĂŁo for aceitĂĄvel o travamento do programa.
This slide should take about 3 minutes.

Por padrão, um pùnico causarå a resolução da pilha. A resolução pode ser capturada:

use std::panic;

fn main() {
    let result = panic::catch_unwind(|| "Nenhum problema aqui!");
    println!("{result:?}");

    let result = panic::catch_unwind(|| {
        panic!("ah nĂŁo!");
    });
    println!("{result:?}");
}
  • Capturar Ă© incomum; nĂŁo tente implementar exceçÔes com catch_unwind!
  • Isso pode ser Ăștil em servidores que devem continuar rodando mesmo se uma requisição tenha falhado.
  • Isso nĂŁo funciona se panic = 'abort' estiver definido em seu Cargo.toml.