Liaison plus facile dans rustdoc
L'équipe du langage a annoncé que la vedette de cette nouvelle version est rustdoc, qui bénéficie de quelques modifications pour faciliter encore plus la rédaction de documentation. Alors, qu'est-ce que rustdoc ? En effet, la distribution standard de Rust est livrée avec un outil appelé rustdoc. Son travail consiste à générer de la documentation pour les projets Rust. Sur un plan fondamental, rustdoc prend comme argument soit une racine de caisse (crate), soit un fichier Markdown, et produit du HTML, du CSS et du JavaScript.
Le fait que rustdoc permet de rédiger de la documentation dans Markdown le rend très facile à utiliser, mais présente aussi quelques inconvénients. Markdown ne sait rien de Rust, et des URL que rustdoc génère. Ainsi, lors de l'écriture d'une documentation, les programmeurs Rust doivent décrire eux-mêmes ces liens manuellement. Selon l'équipe, non seulement ce processus est fastidieux et sujet à erreur, mais il peut également être erroné à certains endroits. En gros, vous ne pouvez pas écrire ces liens à la main, et les faire tous correspondre à la réalité.
Dans cette version, vous pouvez utiliser une certaine syntaxe pour faire savoir à rustdoc que vous essayez de créer un lien vers un type, et il générera les URL pour vous.
Ajout des alias de recherche
À partir de Rust 1.48.0, vous pouvez maintenant spécifier #[doc(alias = "<alias>")] sur les éléments pour ajouter des alias de recherche lors de la recherche dans l'interface utilisateur de rustdoc. Il s'agit d'un changement moins important, mais toujours utile. Cela ressemble à ceci :
Code Rust : | Sélectionner tout |
1 2 | #[doc(alias = "bar")] struct Foo; |
Avec cette annotation, si vous recherchez "bar" dans la recherche de rustdoc, "Foo" apparaîtra dans les résultats, même si le texte de votre recherche ne contient pas "Foo". D'après l'équipe, un cas d'utilisation intéressant pour les alias est celui des caisses de wrapper FFI, où chaque fonction Rust pourrait avoir un alias correspondant à la fonction C qu'elle enveloppe. Les utilisateurs existants de la bibliothèque C sous-jacente pourraient alors facilement rechercher les bonnes fonctions Rust.
La bibliothèque de Rust
Selon l'équipe, le changement le plus significatif de l'API est en quelque sorte "une bouchée de pain" : [T ; N] : TryFrom<Vec<T>> est maintenant stable. Qu'est-ce que cela signifie ? Eh bien, vous pouvez utiliser cela pour essayer de transformer un vecteur en un tableau d'une longueur donnée
« Dans la dernière version de Rust, nous avons parlé de la possibilité pour la bibliothèque standard d'utiliser des const génériques. C'est un bon exemple des types d'API que nous pouvons ajouter avec ce genre de fonctionnalités. Attendez-vous à en savoir plus sur la stabilisation des const generics bientôt », a déclaré l'équipe de développement du langage.
D'autres changements dans la bibliothèque
- io::Write est maintenant implémenté pour &ChildStdin, &Sink, &Stdout, et &Stderr ;
- tous les tableaux, quelle que soit leur longueur, implémentent maintenant TryFrom<Vec<T>> ;
- la macro matches! supporte maintenant l'utilisation d'une virgule de fin de ligne ;
- Vec<A> implémente maintenant PartialEq<[B]> où A : PartialEq<B> ;
- les méthodes RefCell::{replace, replace_with, clone} utilisent maintenant toutes #[track_caller].
Cinq nouvelles API ont été stabilisées dans cette version
- slice::as_ptr_range ;
- slice::as_mut_ptr_range ;
- VecDeque::make_contiguous ;
- future::pending ;
- future::ready.
Les API suivantes, auparavant stables, ont été rendues constantes
- Option::is_some ;
- Option::is_none ;
- Option::as_ref ;
- Result::is_ok ;
- Result::is_err ;
- Result::as_ref ;
- Ordering::reverse ;
- Ordering::then.
Notes de compatibilité
- les liaisons de type associées sur les objets du trait sont désormais vérifiées pour respecter les limites déclarées sur le trait le trait lors de la vérification de leur implémentation ;
- lorsque les limites du trait sur les types associés ou les types opaques sont ambiguës, le compilateur ne fait plus un choix arbitraire sur la limite à utiliser ;
- correction des non-terminaux récursifs qui n'étaient pas développés dans les macros lors de la vérification de la préimpression/réparation. Cela peut provoquer des erreurs si votre macro ne gérait pas correctement les jetons non terminaux récursifs ;
- les références &mut aux types de taille non nulle ne sont plus promues ;
- rustc vous avertira désormais si vous utilisez des attributs comme #[link_name] ou #[cold] dans des endroits où ils n'ont aucun effet ;
- mem::uninitialized paniquera maintenant si des types internes à l'intérieur d'une structure ou d'une énumération interdisent l'initialisation zéro ;
- #[target_feature] affichera maintenant une erreur s'il est utilisé à un endroit où il n'a aucun effet ;
- les exceptions étrangères sont maintenant capturées par catch_unwind et provoqueront un abandon. Note : Ce comportement n'est pas garanti et est toujours considéré comme un comportement indéfini.
Source : Rust 1.48.0
Et vous ?
Que pensez-vous de Rust 1.48.0 ?
Voir aussi
Rust 1.47.0 est disponible et s'accompagne de la prise en charge par défaut de LLVM 11, ainsi que de neuf API qui passent en version stable dans la bibliothèque
Rust 1.46.0 est disponible et s'accompagne de plusieurs nouveautés dans const fn, ainsi que de deux nouvelles API dans la bibliothèque standard
Rust 1.45.0 est disponible avec la correction du problème de la conversion entre des entiers et des flottants et de nombreuses fonctionnalités
Rust 1.44.0 est disponible et apporte la commande cargo tree à Cargo pour l'impression d'un graphe arborescent des dépendances