Rust 1.26 est disponible et apporte le type existentiel

Par:
fredericmazue

lun, 14/05/2018 - 16:15

L'équipe de développement de Rust a annoncé la disponibilité de la version  1.26 de ce langage qui est présenté comme particulièrement efficace en ce qui concerne la sécurité, la rapidité à l'exécution et la programmation concurrente.

L'équipe de développement fait remarquer que cette version 1.26 est probablement la plus importante depuis la sortie de la version 1.0. En plus d'un temps de compilation réduit de 12%, Rust 1.26 témoigne d'une grosse évolution du langage. La nouveauté la plus originale est l'arrivée du type existentiel.

Soit cette déclaration de fonction :

fn foo() -> impl Trait {

    // ...

}

Cette déclaration dit que foo est une fonction qui ne prend aucun argument, et qui retourne un type implémentant Trait. Autrement dit, la déclaration de la fonction ne dit pas quel est exactement son type de retour. Seulement que ce type implémente un trait particulier.

A quoi ça sert ? Un bon usage de cette nouvelle fonctionnalité se trouve dans les fermetures (closures). En Rust celle-ci ont un type unique qui implémente le trait Fn. Ceci fait que si vous voulez écrire une fonction qui retourne une fermeture, vous pouvez le faire comme ceci :

// avant

fn foo() -> Box<Fn(i32) -> i32> {

    Box::new(|x| x + 1)

}

// après

fn foo() -> impl Fn(i32) -> i32 {

    |x| x + 1

}