Introduction
Dans ce laboratoire, nous étudions la macro panic! en Rust, qui peut être utilisée pour générer une panique et commencer à dérouler sa pile, entraînant la sortie du programme en rapportant le message de panique. Le runtime prend soin de libérer toutes les ressources appartenant au fil en appelant le destructeur de ses objets. Nous examinons également un exemple d'utilisation de la macro panic! pour gérer la division par zéro et vérifions qu'elle ne résulte pas de fuites mémoire en utilisant Valgrind.
Note : Si le laboratoire ne spécifie pas de nom de fichier, vous pouvez utiliser n'importe quel nom de fichier que vous voulez. Par exemple, vous pouvez utiliser
main.rs, le compiler et l'exécuter avecrustc main.rs &&./main.
panic!
La macro panic! peut être utilisée pour générer une panique et commencer à dérouler sa pile. Pendant le déroulement, le runtime prendra soin de libérer toutes les ressources propriées par le fil en appelant le destructeur de tous ses objets.
Puisque nous traitons de programmes avec un seul fil, panic! entraînera la sortie du programme en rapportant le message de panique.
// Re-implementation of integer division (/)
fn division(dividend: i32, divisor: i32) -> i32 {
if divisor == 0 {
// Division by zero triggers a panic
panic!("division by zero");
} else {
dividend / divisor
}
}
// The `main` task
fn main() {
// Heap allocated integer
let _x = Box::new(0i32);
// This operation will trigger a task failure
division(3, 0);
println!("This point won't be reached!");
// `_x` should get destroyed at this point
}
Vérifions que panic! ne fuit pas de mémoire.
<!-- REUSE-IgnoreStart -->
<!-- Prevent REUSE from parsing the copyright statement in the sample code -->
$ rustc panic.rs && valgrind./panic
==4401== Memcheck, a memory error detector
==4401== Copyright (C) 2002-2013, and GNU GPL'd, by Julian Seward et al.
==4401== Using Valgrind-3.10.0.SVN and LibVEX; rerun with -h for copyright info
==4401== Command:./panic
==4401==
thread '<main>' panicked at 'division by zero', panic.rs:5
==4401==
==4401== HEAP SUMMARY:
==4401== in use at exit: 0 bytes in 0 blocks
==4401== total heap usage: 18 allocs, 18 frees, 1,648 bytes allocated
==4401==
==4401== All heap blocks were freed -- no leaks are possible
==4401==
==4401== For counts of detected and suppressed errors, rerun with: -v
==4401== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
<!-- REUSE-IgnoreEnd -->
Résumé
Félicitations ! Vous avez terminé le laboratoire Panic!. Vous pouvez pratiquer d'autres laboratoires sur LabEx pour améliorer vos compétences.