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 seuCargo.toml
.