Sortie de Rust 1.35

Par:
fredericmazue

mar, 28/05/2019 - 15:48

L'équipe du langage Rust annonce la disponibilité de la version 1.35. Rust est un langage de programmation qui permet à chacun de concevoir des logiciels fiables et efficaces, souligne pour l'occasion l'équipe dans le billet annonçant cette disponibilité.

Les deux principales nouveautés mises en avant sont que :

1/ Les traits FnOnce, FnMut, et Fn sont désormais implémentés pour Box<FnOnce>, Box<FnMut> et Box<Fn> respectivement.

2/ Depuis Rust 1.19.0, il est possible de contraindre les fermetures (closures) dans des pointeurs de fonction. Par exemple :

fn twice(x: u8, f: fn(u8) -> u8) -> u8 {
    f(f(x))
}

fn main() {
    assert_eq!(42, twice(0, |x| x + 21));
}

Mais ceci n'était pas applicable aux pointeurs de fonction unsafe. Avec Rust 1.35, ça le devient :

unsafe fn call_unsafe_fn_ptr(f: unsafe fn()) {
    f()
}

fn main() {
    unsafe {
        call_unsafe_fn_ptr(|| {
            dbg!();
        });
    }
}

A remarquer encore, la macro dbg! qui est apparue avec Rust 1.32 peut désormais être utilisée sans argument.

Exemple d'utilisation classique :

fn main() {
    let mut x = 0;

    if dbg!(x == 1) {
        x += 1;
    } 
   dbg!(x);
}

affiche

[src/main.rs:4] x == 1 = false
[src/main.rs:8] x = 0

Utilisée sans argument dbg! permet de tracer le flux d'exécution de l'application. Par exemple :

fn main() {
    let condition = true;

    if condition {
        dbg!();
    }
}

affiche

[src/main.rs:5]

A noter enfin la stabilisation d'un grand nombre d'API.

Rust est un logiciel libre disponible sur GitHub. Cette page du projet récapitule toutes les nouveautés de Rust 1.35.