Ajouter un commentaire

Sortie de Rust 1.32 qui apporte des améliorations de qualité de vie

Par:
fredericmazue

mar, 22/01/2019 - 16:08

L'équipe de développement de Rust annonce la sortie de la version 1.32 stable du langage. Pour mémoire Rust est un langage conçu et développé par Mozilla, qui l'utilise notamment por écrire le moteur de rendu Quantum de son navigateur Firefox.  

Cette version vient comme il se doit avec de nombreuses nouveautés et améliorations. Nous nous intéresserons ici aux améliorations de la qualité de vie, selon les termes de l'équipe Rust.

Il s'agit de la qualité de vie des développeurs, c'est bien d'y penser :-) Rust 1.32 veut leur faciliter la tâche notamment en ce qui concerne le débogage.

Si vous faites partie de ceux qui aiment bien que le code en cours de développement affiche quelques valeurs lors de l'exécution, vous deviez procéder ainsi, par exemple :

let x = 5;
println!("{:?}", x);

// ou peut-être comme ceci</>
println!("{:#?}", x);

Pas très agréable à écrire... Rust vient avec une nouvelle macro, dbg!, qui facilite indéniablement la vie :

fn main() {
    let x = 5;

    dbg!(x);
}

Ce qui va afficher à l'exécution :

[src/main.rs:4] x = 5

La macro dgb! affiche ses sorties sur le canal standard stderr. Pour mémoire println! affiche sur stdout. (il fallait utiliser eprintln! pour obtenir des sorties sur stderr).

Cette nouvelle macro dbg! fonctionne dans des contextes complexes et le fait qu'elle renvoie la valeur de ce qu'elle est en train de débogueur procure des sorties beaucoup plus explicites et utiles. Soit une fonction factorielle classique :

fn factorial(n: u32) -> u32 {
    if n <= 1 {
        n
    } else {
        n * factorial(n - 1)
    }
}

Avant pour la débogueur il fallait écrire ceci

fn factorial(n: u32) -> u32 {
    eprintln!("n: {}", n);

    if n <= 1 {
        eprintln!("n <= 1");

        n
    } else {
        let n = n * factorial(n - 1);

        eprintln!("n: {}", n);

        n
    }
}

ce qui est assez lourd, pour obtenirune sortie comme ceci :

n: 4
n: 3
n: 2
n: 1
n <= 1
n: 2
n: 6
n: 24

Avec la macro dbg! tout s'allège :

fn factorial(n: u32) -> u32 {
    if dbg!(n <= 1) {
        dbg!(1)
    } else {
        dbg!(n * factorial(n - 1))
    }
}

Et la sortie produite est beaucoup plus intéressante

[src/main.rs:3] n <= 1 = false
[src/main.rs:3] n <= 1 = false
[src/main.rs:3] n <= 1 = false
[src/main.rs:3] n <= 1 = true
[src/main.rs:4] 1 = 1
[src/main.rs:5] n * factorial(n - 1) = 2
[src/main.rs:5] n * factorial(n - 1) = 6
[src/main.rs:5] n * factorial(n - 1) = 24
[src/main.rs:11] factorial(4) = 24

Filtered HTML

Plain text

CAPTCHA
Cette question permet de vérifier que vous n'êtes pas un robot spammeur :-)
 X   X  DDD    CCC  TTTTTT  TTTTTT 
X X D D C TT TT
X D D C TT TT
X X D D C TT TT
X X DDD CCC TT TT