• # Pas encore de gestion des erreurs d'allocation mémoire

    Posté par (site web personnel) . En réponse à la dépêche Conférence GStreamer 2017 : Oxydation de GStreamer. Évalué à 9. Dernière modification le 09 novembre 2017 à 09:32.

    Soit un mini programme :

    usestd::io;
    usestd::io::Read;
    usestd::fs::File;
    fn readfile()-> Result<String,io::Error>{
    letmutf=File::open("hello.txt")?;
    letmuts=String::new();
    f.read_to_string(&muts)?;
    Ok(s)
    }
    fn main(){
    letbla=readfile();
    matchbla{
    Ok(_)=>println!("success"),
    Err(e)=>println!("failure {}",e),
    }
    }

    Le fichier hello.txt fait 10 Mo, et je limite la mémoire du programme à 20 Mo avec "ulimit -v 20000". Résultat : le runtime Rust affiche "fatal runtime error: allocator memory exhausted", puis le programme Rust plante avec le signal SIGILL (Illegal instruction).

    Sur IRC, on m'apprend que Rust n'a pas encore implémenté la gestion d'erreur sur les allocations mémoires. Ah. C'est dommage ça.

    De là à appuyer tout l'argumentaire de Rust sur "les programmes écrits en C et C++ peuvent planter, un code écrit en Rust ne peut pas planter", je trouve que ça méritait quelques précisions :-) (Par planter je veux dire : signal fatal genre SIGSEGV... ou SIGILL.)