Rust 1.5 est disponible en version stable
Avec une nouvelle commande permettant au gestionnaire de package d'installer des packages localement
Le 2015-12-12 11:22:05, par Olivier Famien, Chroniqueur Actualités
La Fondation Mozilla vient d’annoncer la disponibilité de Rust 1.5 en version stable. Pour cette nouvelle version, il faut compter environ 700 changements et de nombreux correctifs de bogues.
Parmi les nouvelles fonctionnalités, le point le plus important demeure l’introduction de la nouvelle commande « Cargo install » permettant d’installer localement sur le système les packages d’application hébergés sur la plateforme crates.io.
Nous rappelons que cette fonctionnalité a été depuis longtemps réclamée par les développeurs afin de pouvoir installer des packages qui sont hors du manifest. En réponse, Mozilla avait intégré la mise en œuvre de cet outil dans sa feuille de route couvrant les futures fonctionnalités de Rust.
Dans cette présentation, trois axes avaient été définis parmi lesquels l’implémentation de fonctionnalités permettant au gestionnaire de packages Cargo d’installer des binaires. Cela aurait pour avantage d’offrir aux développeurs Rust des moyens plus aisés pour partager les applications Rust.
Avec cette nouvelle itération, les développeurs peuvent utiliser la nouvelle commande Cargo install pour installer des applications, mais également pour installer de nouvelles sous-commandes pour cargo lui-même. Comme nouvelles sous-commandes disponibles pour étendre les fonctionnalités de Cargo, nous avons par exemple :
À côté de ces fonctionnalités, Rust 1.5 connait également un certain nombre de stabilisations au niveau des API de bibliothèques. À ce sujet, nous avons de manière non exhaustive les API suivantes qui ont été améliorées : BinaryHeap::from, BinaryHeap::into_sorted_vec, FileTypeExt::is_block_device, FileTypeExt::is_char_device, Formatter::alternate, Formatter::fill, Iterator::cmp, Iterator::eq, Path::canonicalize, Path::exists, Utf8Error::valid_up_to, Vec::resize, VecDeque::as_mut_slices, slice::split_first_mut, slice::split_first, str::MatchIndices, str::RMatchIndices.
En outre, lorsque vous créez des packages, les dépendances d’un crate sont associées à des contraintes qui exigent de définir les versions de dépendances avec lesquelles ce crate est compatible. Ces versions de dépendances peuvent être de l’ordre d’une seule version précisée de cette manière (=1.2.3), de plusieurs versions (^1.2.3, ~1.2.3, >= 1.2.3, < 3.0.0) ou de toutes les versions de dépendance matérialisées par le caractère générique (*).
Nous rappelons en outre qu’un crate est une unité de compilation qui peut servir à générer une bibliothèque ou un package. Et pour cette nouvelle version de Rust, le processus RFC (Request For Comments) de la communauté Rust a proposé la mise à jour de crates.io afin de rejeter les publications de crates utilisant une contrainte de version générique pour définir les dépendances de compilation et de construction de build associées au projet.
En conséquence, les crates utilisant les dépendances avec le caractère générique (*) dans cette version 1.5 déclencheront des avertissements à la publication. Et pour la version 1.6, il ne sera plus possible de publier des crates associant des dépendances avec le caractère générique (*).
Enfin, Mozilla annonce dans cette nouvelle mouture des améliorations au niveau du temps de compilation et une réduction des métadonnées de crate d’environ 20 %. Plusieurs autres améliorations et nouvelles fonctionnalités sont disponibles au niveau du langage, de bibliothèques, des divers et bien d’autres encore.
Source : Blog Rust
Et vous ?
Que pensez-vous des nouvelles fonctionnalités de Rust 1.5 ?
Quelles sont les améliorations que vous souhaitez voir dans les prochaines versions de Rust ?
Voir aussi
Forum Autres langages
Parmi les nouvelles fonctionnalités, le point le plus important demeure l’introduction de la nouvelle commande « Cargo install » permettant d’installer localement sur le système les packages d’application hébergés sur la plateforme crates.io.
Nous rappelons que cette fonctionnalité a été depuis longtemps réclamée par les développeurs afin de pouvoir installer des packages qui sont hors du manifest. En réponse, Mozilla avait intégré la mise en œuvre de cet outil dans sa feuille de route couvrant les futures fonctionnalités de Rust.
Dans cette présentation, trois axes avaient été définis parmi lesquels l’implémentation de fonctionnalités permettant au gestionnaire de packages Cargo d’installer des binaires. Cela aurait pour avantage d’offrir aux développeurs Rust des moyens plus aisés pour partager les applications Rust.
Avec cette nouvelle itération, les développeurs peuvent utiliser la nouvelle commande Cargo install pour installer des applications, mais également pour installer de nouvelles sous-commandes pour cargo lui-même. Comme nouvelles sous-commandes disponibles pour étendre les fonctionnalités de Cargo, nous avons par exemple :
- cargo-count : qui permet d’afficher les statistiques telles que le code, les commentaires, les compteurs concernant les projets ;
- cargo-graph : cette sous-commande permet de construire les fichiers GraphViz DOT des graphes de dépendance ;
- cargo-edit : qui permet d’ajouter une fonctionnalité à Cargo afin d’éditer des dépendances pour un projet à partir d’une ligne de commande ;
- cargo-readme : permettant de générer du contenu README.md à partir des commentaires de la documentation ;
- cargo-check : permettant de vérifier un projet de manière statique sans toutefois produire de binaire ;
- cargo-script : qui permet d’exécuter des scripts Rust assez facilement en se servant de l’écosystème de package de Rust ;
- Cargo-watch : qui permet de réexécuter une commande de Cargo lorsque des modifications sont effectuées dans le projet ;
- cargo-extras : est une collection de sous-commandes de Cargo ;
- cargo-outdated : est une sous-commande de Cargo pour l’affichage lorsque les dépendances sont obsolètes.
À côté de ces fonctionnalités, Rust 1.5 connait également un certain nombre de stabilisations au niveau des API de bibliothèques. À ce sujet, nous avons de manière non exhaustive les API suivantes qui ont été améliorées : BinaryHeap::from, BinaryHeap::into_sorted_vec, FileTypeExt::is_block_device, FileTypeExt::is_char_device, Formatter::alternate, Formatter::fill, Iterator::cmp, Iterator::eq, Path::canonicalize, Path::exists, Utf8Error::valid_up_to, Vec::resize, VecDeque::as_mut_slices, slice::split_first_mut, slice::split_first, str::MatchIndices, str::RMatchIndices.
En outre, lorsque vous créez des packages, les dépendances d’un crate sont associées à des contraintes qui exigent de définir les versions de dépendances avec lesquelles ce crate est compatible. Ces versions de dépendances peuvent être de l’ordre d’une seule version précisée de cette manière (=1.2.3), de plusieurs versions (^1.2.3, ~1.2.3, >= 1.2.3, < 3.0.0) ou de toutes les versions de dépendance matérialisées par le caractère générique (*).
Nous rappelons en outre qu’un crate est une unité de compilation qui peut servir à générer une bibliothèque ou un package. Et pour cette nouvelle version de Rust, le processus RFC (Request For Comments) de la communauté Rust a proposé la mise à jour de crates.io afin de rejeter les publications de crates utilisant une contrainte de version générique pour définir les dépendances de compilation et de construction de build associées au projet.
En conséquence, les crates utilisant les dépendances avec le caractère générique (*) dans cette version 1.5 déclencheront des avertissements à la publication. Et pour la version 1.6, il ne sera plus possible de publier des crates associant des dépendances avec le caractère générique (*).
Enfin, Mozilla annonce dans cette nouvelle mouture des améliorations au niveau du temps de compilation et une réduction des métadonnées de crate d’environ 20 %. Plusieurs autres améliorations et nouvelles fonctionnalités sont disponibles au niveau du langage, de bibliothèques, des divers et bien d’autres encore.
Source : Blog Rust
Et vous ?
Voir aussi
-
UtherExpert éminent séniorCe point de l'article est très confus.
L'outil standard pour construire les projets en Rust existe déjà et marche très bien : c'est Cargo et il était déjà disponible quelque mois avant la sortie de la version 1.0 de Rust. Depuis que Rust est officiellement disponible, Cargo a toujours été l'outil privilégié pour construire et gérer les dépendances des applications et des bibliothèques écrites en Rust.
Le problème est juste au niveau de la compilation du compilateur Rust lui même. Il a été réécrit en Rust (la première version était en OCaml), des années avant l'arrivée de Cargo, le système de construction a donc été basé sur les makefiles. Le compilateur étant assez complexe, l'adapter pour utiliser Cargo est un très gros travail qui n'était pas considéré comme prioritaire et n'a donc réellement commencé que récemment. Il n'y a pas de nouvel outil : Il s'agit juste de mettre a jour le compilateur pour utiliser l'outil standard que quasiment tous les autres projets Rust utilisent déjà.le 17/04/2016 à 9:49 -
SongbirdMembre expert
Je ne doutes pas que je finirais par en faire,
mais aujourd'hui à cet instant, la chose n'est pas évidente pour moi
et je préfère encore me tourner vers d'autres langages
partageant certains points commun avec celui ci.
Concernant la syntaxe, c'est précisément ce qui me donne envie d'étudier Rust (si l'on ne parle que d'elle), car la syntaxe me semble moins... éparpillée que le C++. Cela reste très personnel, bien entendu.
D'ailleurs, si quelque chose te rebute dans la syntaxe, des ressources existent pour expliquer littéralement ce que signifie telle ou telle expression.
Très bonne journée !le 10/06/2017 à 18:41 -
mh-cbonMembre extrêmement actifRust c'est tout de même plusieurs choses, amha.
Un langage pour répondre aux problèmes de ces prédécesseurs.
Un toolset autour du langage pour vivre avec.
Un esprit définitivement progressiste et tourné vers l'avenir.
De cet ensemble, je suis très satisfait,
c'est un changement appréciable car il est plus proche des utilisateurs,
en comparaison, pendant longtemps les avancées que l'on pouvait lire à propos des langages
concernaient des questions très théorique de la théorie des langages (preuves formelles etc)
qui finalement aboutissaient à peu de changement concret/applicable pour l'utilisateur final lambda.
J'apprécie beaucoup cela, pour autant est ce que j'aime ce langage,
bein pas trop en fait,
comme tout le monde, j'aime bien sa théorie et sa mise en pratique,
mmmmmeeeeehhhhhh
la syntaxe est bien trop complexe pour mon goût personnel.
Je ne doutes pas que je finirais par en faire,
mais aujourd'hui à cet instant, la chose n'est pas évidente pour moi
et je préfère encore me tourner vers d'autres langages
partageant certains points commun avec celui ci.le 10/06/2017 à 12:08 -
imperioMembre éméritela syntaxe est bien trop complexe pour mon goût personnel.le 10/06/2017 à 13:56
-
mothsARTMembre régulierMh-cbon : ton approche top => bottom est bonne : beaucoup ne font pas l'effort et du coup progresse peu à mon sens.
Le passage à un typage fort est douloureux mais au final nécessaire car le gain est juste énorme : tu évites une paire de bug à l’exécution, le code est plus cohérent, t'as de meilleurs perfs etc.
Tu mets C et C++ dans le panier des vieux langages mais tu remarqueras que Go ne les remplace pas vraiment car il utilise un Garbage collector et une VM.
Pour moi, Go est un Java bis avec une syntaxe minimaliste, des gros avantages sur la programmation concurrente et des temps de compilation plus court.
Bref, rien de bien novateur à mon sens.
La réalité est que C et C++ sont pour l'instant encore indétrônable dans tous les domaines ou les perfs et la gestion de la mémoire sont critiques.
Rust étant plus ambitieux et par conséquent plus complexe est un réel candidat pour les remplacer.
Je dirais, pour ma part que le cap à passer pour Rust n'était pas vraiment la syntaxe (que je trouve élégante et intuitive) mais plus le borrowing. (et dans une moindre mesure les macros et closures)
Mais, comme tous les langages, il a des zones implicites qui nécessite apprentissage.
Ton exemple et ton incompréhension proviennent de là :
* la variable "f" et "let mut f" : f est dans un premier temps immutable : si le match réussi (passe par le Ok), cette variable est écrasé par le résultat et est converti en une variable mutable.
* le type Result est un peu particulier : il attend soit un objet succès ("Ok"avec le résultat (ici typé en String car on désire récupérer le contenu du fichier mais ça pourrais être n'importe quoi d'autre dans un autre contexte) ou un objet d'échec ("Err" .
* le premier match (qui vérifie l'accès en lecture du fichier) a un retour explicite qui précise que si il détecte une erreur, il sort directement de la fonction (et par conséquent la variable mutable f n'est pas alimenté, la variable s n'est pas créé et le dernier match non executé.
* let permet de déclarer une variable, je ne vois pas trop ce qui te choques. (tu remplaces "var" par "let" dans ton passage de Go à Rust ou de NodeJS à Rust)
* en rust si la dernière ligne d'une fonction ne se termine pas par ";", on retourne implicitement le résultat.
C'est ce qui se passe dans le dernier match.
* s n'est pas déclaré 2 fois, elle est passé par référence dans la fonction "read_to_string".
* read_username_from_file renvoi une valeur qui peut parfaitement être mutable ou non selon la déclaration de ta variable de récupération :
Code : 1
2
3
4let username_immutable = read_username_from_file(); // ou let mut username_mutable = read_username_from_file();
le 11/06/2017 à 14:13 -
UtherExpert éminent séniorResult est un cas particulier vu que comme c'est un élément central du langage, ses variant OK et Err sont inclus dans le prélude, ce qui fait que l'on peut les utiliser directement. Comme le type Result est utilisé partout, n'importe qui avec un minimum d'expérience dans le langage reconnais ça du premier abord.
Cependant, si tu tient à ce que ce soit clair que Ok et Err sont des variants du type énuméré Result, tu peux faire :
Code Rust : 1
2
3
4let mut f = match f { Result::Ok(file) => file, Result::Err(e) => return Result::Err(e), };
le 12/06/2017 à 13:18 -
SongbirdMembre expert
Tout comme les variantes de l'enum Option<T>: Some(T) et None sont parfaitement comprises par le compilateur.
Sans expliciter la provenance des variantes ça donne:Code Rust : 1
2
3
4
5
6
7
8fn main() { let foo = Some("Hello there!".to_owned()); let bar = match foo{ Some(content) => content, None => "Nothing, here.".to_owned(), }; println!("bar={}", &bar); }
Ce sont de petites subtilités, mais vraiment rien d'insurmontable. Ce ne sont pas des ressources "magiques", juste des raccourcis.le 12/06/2017 à 18:09 -
trallocMembre averti@mh-cbon
Eh bien moi c'est la deuxième fois que je me penche sur ce language.la première fois je l'ai trouvé trop complexe moi aussi.
Rien à voir avec les typages forts parce que je fais du JEE du C. Ni les typages faibles, car je ne suis pas trop mauvais en python.
Eh bien pour une deuxième fois, je commence à l'apprécier, et je crois qu'il vaut vraiment le coup.
La syntaxe est une chose, lorsqu'on a commencé à la comprendre il faut ensuite l'adopter. Une fois ce cap passé on peut profiter de sa richesse.le 15/06/2017 à 9:19 -
Kennel sébastienMembre avertiBonjour tralloc,
C'est super de chercher à aider les autres :-).
Je voulais juste me permettre de te signaler un point :-p :
Tu as écrit « Ni les typages faibles, car je ne suis pas trop mauvais en python », or Python a un typage fort, en effet tu confonds typage statique et dynamique mais les trois langages ont des typages fort.
Des langages qui auraient des typages faibles sont par exemple : PHP, Javascript ou Ring.Code : print(5 + "5")
Code : See 5 + "5"
Rust a en fait un typage qui est inféré comme Go, Crystal, Swift…, c'est-à-dire que tu peux le rendre statique ou le laisser chercher le type pour toi alors que tu pourrais pas le faire en Python, en Python c'est lui qui cherche pour toi, il n'y a pas de déclaration de type.
Enfin pour ceux qui trouvent trop difficile Rust, peut-être vous tournez sur Go et revenir après sur Rust…le 15/06/2017 à 10:19 -
joublieMembre confirmé[B]cargo check[/C]
" Alors concrètement de quel pourcentage de vitesse les développeurs vont-ils bénéficier ? " C'est assez mal rédigé, non ?le 18/03/2017 à 13:41