</>
Plan du cours — 62/66

unsafe

Avancé

unsafe ne désactive pas le borrow checker : il débloque cinq « super-pouvoirs » dont vous garantissez la sûreté.

// 1. Déréférencer un pointeur brut
let x = 5;
let p = &x as *const i32;
unsafe { println!("{}", *p); }

// 2. Appeler une fonction unsafe / extern (FFI)
unsafe extern "C" {
    fn abs(input: i32) -> i32;
}
let v = unsafe { abs(-3) };

// 3. Accéder à une variable statique mutable
// 4. Implémenter un trait unsafe (Send, Sync)
// 5. Accéder aux champs d'une union

Bonne pratique : encapsulez chaque bloc unsafe dans une API sûre, minimale, et documentez l'invariant avec un commentaire // SAFETY: .... cargo miri test détecte de nombreux comportements indéfinis.