La version stable de Rust 1.26.1 est désormais disponible,
Et apporte une bonne dose de correctifs à l'écosystème

Le , par Songbird_, Rédacteur/Modérateur
La version stable de Rust 1.26.1 est désormais disponible !
et apporte une bonne dose de correctifs à l'écosystème


Rust est un langage de programmation système axé sur la sécurité, la rapidité et la concurrence.

Pour mettre à jour votre version stable, il suffit d’exécuter la commande habituelle.

$ rustup update stable
Quoi de neuf ?

Dans ce billet nous nous intéresserons à la version 1.26.1 qui, comme pour toutes les versions mineures, vient stabiliser ce qui a été apporté dans les mises à jour précédentes.

RLS n'interfère plus avec les commandes de build

La version de RLS fournie avec la 1.26.0 utilisait le même répertoire de sortie que Cargo en ligne de commande, ce qui occasionnait une recompilation intégrale du projet si vous utilisiez les deux à tour de rôle. Le problème était d’autant plus gênant sous Windows, puisque RLS (ou le compilateur) ne relâchait pas le verrou qu’il avait sur les fichiers à traiter. Le bogue n’a pas encore été fixé, mais ce dernier survient moins souvent grâce à un premier correctif.


Mauvais formatage de rustfmt


Précédemment, rustfmt indentait excessivement les chaînes de caractères littérales multilignes. Ce problème est désormais corrigé.

Renvoyer quelque chose depuis `main` avec `impl Trait` ne fonctionnera plus

Jusqu’ici, le compilateur s’assurait uniquement que les services du trait std::process::Termination étaient implémentés par le type renvoyé. Ce comportement est, désormais, révolu puisque rustc n’acceptera plus que les types concrets en retour, sur la version stable. Quant à l’utilisation de impl Termination, elle n’est, actuellement, autorisée que dans le canal nightly.

Par exemple, ce morceau de code ne fonctionnera plus en 1.26.1:

Code Rust : Sélectionner tout
fn main() -> impl Copy {}

Le second, en revanche, ne posera aucun problème, puisque la signature de la fonction ne déclare aucun type inconnu par le biais de impl Trait.
Code Rust : Sélectionner tout
1
2
3
4
 
fn main() -> Result<(), std::io::Error> {
    Ok(())
}

Seuls les types concrets peuvent être déclarés dans la signature (pour le type renvoyé, à bon entendeur).


Le turbofish ne fonctionnera plus pour les arguments typés avec `impl Trait`


En 1.26.0, il était possible de spécifier le type des arguments des méthodes qui utilisaient impl Trait. Cependant, comment le turbofish (::<u32>, en l’occurrence) devrait interagir avec un type qui n’a pas encore été inféré (i.e. impl Trait) ? En réponse à cela, l’utilisation du turbofish a été temporairement prohibée, tant que l’équipe Rust n’a pas trouvé de solution à ce problème de sémantique.


La comparaison des valeurs flottantes et constantes a été revue


La constante std::f64::NAN, lorsque comparée à un autre nombre flottant, était considérée systématiquement supérieure à l’autre opérande, ce qui renvoyait jusqu’ici true. Ce bug a également été corrigé.

D’après l’équipe Rust, bien que cela ait occasionné une modification, il est peu probable que cette dernière ait des conséquences sur le comportement des programmes.
Code Rust : Sélectionner tout
1
2
3
4
5
6
7
 
use std::f64::NAN;
const FOO: bool = ::std::f64::NAN >= ::std::f64::NAN;
// On 1.26.0
assert_eq!(FOO, true);
// On 1.26.1
assert_eq!(FOO, false);


rustup devrait désormais accepter les installations partielles

Lors du cycle de développement de la 1.26.0, des changements ont été effectués sur la manière dont la documentation de la bibliothèque standard était générée, stoppant par la même occasion la production de la documentation des composants pour un certain nombre de plateformes. En conséquence, lorsque rustup update était lancée sur ces dernières, rustup refusait d’installer partiellement les composants de la chaîne. Les utilisateurs concernés devront alors exécuter rustup install stable au lieu d’une simple mise à jour avec rustup update pour que rustup ignore la documentation manquante.

Le bug a malheureusement été corrigé trop tard pour que le correctif soit inclut dans la 1.26.0 et a donc été ajouté dans le patch de la 1.26.1.

Code bash : Sélectionner tout
1
2
3
4
$ rustup update
info: syncing channel updates for 'stable-x86_64-unknown-freebsd'
info: latest update on 2018-05-10, rust version 1.26.0 (a77568041 2018-05-07)
error: component 'rust-docs' for 'x86_64-unknown-freebsd' is unavailable for download

Source : The Rust Programming Language Blog

Et vous ?

Que pensez-vous de cette nouvelle version ?
Quelles fonctionnalités souhaiteriez-vous voir ?

Voir aussi

Tutoriel Rust en bref ! Tour d'horizon sur le langage Rust : usage, outils, IDE
La version stable de Rust 1.26 est maintenant disponible, et est probablement la version la plus riche en termes de fonctionnalités depuis Rust 1.0
La version 1.25 de Rust est désormais disponible, et apporte avec elle stabilisation et réorganisation dans l'écosystème du langage


Vous avez aimé cette actualité ? Alors partagez-la avec vos amis en cliquant sur les boutons ci-dessous :


 Poster une réponse

Avatar de Songbird_ Songbird_ - Rédacteur/Modérateur https://www.developpez.com
le 09/06/2018 à 19:50
La version stable de Rust 1.26.2 est désormais disponible !
et vient stabiliser le fonctionnement du pattern matching

Rust est un langage de programmation système axé sur la sécurité, la rapidité et la concurrence.

Pour mettre à jour votre version stable, il suffit d’exécuter la commande habituelle.

Code bash : Sélectionner tout
$ rustup update stable

Si vous ne disposez pas de rustup, vous pouvez en obtenir une copie sur la page de téléchargement du site officiel. N’hésitez pas également à consulter la release note de la 1.26.2 sur GitHub !

Quoi de neuf ?

De nouveaux correctifs ont été apportés, principalement axés sur les expressions (et les vérifications sous-jacentes) permises par le compilateur. Comme pour la 1.26.1, cette mise à jour n’a pour but que de stabiliser les fonctionnalités existantes.

Bogue dans la règle des emprunts mutables

En dehors des blocs unsafe, le compilateur ne permet pas deux accès en écriture sur une même ressource en simultané. Toutefois, un est bogue survenu, suite à un recyclage apporté par la 1.26.0 visant à améliorer l’ergonomie de match, permettant ainsi de casser la règle précédemment citée.

Ici, par exemple, nous disposons de deux accès en écriture sur bar au même moment.

Code Rust : Sélectionner tout
1
2
3
4
5
6
7
8
let mut foo = Some("foo".to_string());
let bar = &mut foo;
match bar {
    Some(baz) => {
        bar.take(); // Should not be permitted, as baz has a unique reference to the bar pointer.
    },
    None => unreachable!(),
}

En réponse à cela, la version 1.26.2 vient corriger ce problème. Désormais, la vérification est interrompue et renvoie une erreur lorsque le cas survient.

Code Rust : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
error[E0499]: cannot borrow `*bar` as mutable more than once at a time
 --> src/main.rs:6:9
  |
5 |     Some(baz) => {
  |          --- first mutable borrow occurs here
6 |         bar.take(); // Should not be permitted, as baz has a ...
  |         ^^^ second mutable borrow occurs here
...
9 | }
  | - first borrow ends here
 
error: aborting due to previous error

En définitive, l’équipe Rust a pris la décision de publier ce patch le plus rapidement possible pour éviter d’étendre inutilement le laps de temps pendant lequel les compilateurs stables sont affectés par ce bogue.

Source

Le blog de l'équipe Rust

Voir aussi

La version stable de Rust 1.26.1 est désormais disponible !
Responsable bénévole de la rubrique Rust : Siguillaume -