URL: https://linuxfr.org/news/rust-1-0-entree-dans-la-periode-stable Title: Rust 1.0, entrée dans la période stable Authors: ariasuni bubar🦥, Benoît Sibaud, Anonyme, Stéphane Aulery, samdolt, RyDroid, Bruno Michel, reno, anaseto et Sylvestre Ledru Date: 2015年04月29日T02:34:57+02:00 License: CC By-SA Tags: rust, mozilla, programmation et langage Score: 54 Rust est un langage de programmation conçu pour répondre aux problématiques modernes des gros logiciels clients et serveurs utilisant Internet, en particulier la sécurité, la gestion de la mémoire et la parallélisation. Il concurrence donc directement les langages C et C++. ![Logo officiel de Rust](http://pix.toile-libre.org/upload/original/1431714354.png) Vendredi 15 mai 2015, trois ans et demi après [la sortie de la version 0.1](https://linuxfr.org/news/sortie-de-la-version-0-1-de-rust), Rust sort en version 1.0 ! Il y a eu beaucoup de changements depuis : le langage a très fortement évolué, une communauté de développeurs/euses s’est formée, de nombreuses bibliothèques et un guide d’apprentissage du langage ont été créés, et la documentation a été améliorée. L’arrivée d’une version stable est un évènement bienvenu puisqu’elle permet de pouvoir utiliser le langage plus sereinement. Le langage s’ouvre donc un peu à un public plus large que l’enthousiaste et aventureuse équipe de développement de [Servo](https://github.com/servo/servo) ou autres pionniers/ères dans l’utilisation de Rust. Que ce soit dans des contextes personnels ou professionnels, les changements réguliers dans le langage repoussaient de nombreux/ses utilisateurs/trices potentiel·le·s. ---- [Site officiel](http://www.rust-lang.org/) [Annonce de Rust 1.0](http://blog.rust-lang.org/2015/05/15/Rust-1.0.html) [Dépôt de bibliothèques](https://crates.io/) ---- Depuis plusieurs jours, nous apercevions une ombre menaçante. Ça a commencé mercredi, à ce moment-là [elle était toute petite](https://imgur.com/WTnRKe7). Mais la lune apparaissait de plus en plus grande au peuple rustacé au fur et à mesure du temps qui passait, de plus en plus rapidement; au fil des jours, des heures, des minutes. Trois jours déjà qu’elle était là. Nous nous perdions dans le regard devenu inévitable par la taille qu’occupait l’objet céleste dans notre champ de vision, semblant condamner à tout jamais le sous-Reddit à l’obscurité. Il semblait évident que quelque chose allait finir par se produire. La première personne à mettre le sujet sur le tapis se demandait si elle était la seule à la voir. [Un modérateur assurait que ça n’était « probablement rien de grave »](https://www.reddit.com/r/rust/comments/35svug/is_it_just_me_or/cr7ibe4). « citation nécessaire » répondait un·e utilisateur/trice en quête de vérité. La personne qui manipulait le CSS du site savait. Mais les autres semblait la couvrir. ![La lune, menaçante](https://a.thumbs.redditmedia.com/_MuD7UoVO1UNkn1IVO_tINRp89199HxyA4VZIqGfN90.png) Chacun vaquait à ses occupations habituelles. Le silence de la communauté dans son ensemble par rapport à cet évènement était révélatrice de la gravité de ce qui se passait. Le silence de l’acceptation d’un destin inéluctable. Soudain, la collision. Telle une météorite, la lune fit beaucoup de bruit, souleva beaucoup de poussière, fit beaucoup trembler la terre. La poussière retombant peu à peu, nous commencions à découvrir l’influence de l’impact sur le paysage. Pendant un certain temps, nous peinions à ouvrir nos yeux. La poussière retombée, nous découvrions un monde nouveau. Le thème par défaut, fade et sans gaité, s’était transformé en [un magnifique habillage](https://www.reddit.com/r/rust) aux couleurs vives, accordées à celles de Rust, et pour finir un grand et magnifique logo Rust, tel un étendard. Mais ça n’était pas fini. Nous pouvions percevoir une lumière qui semblait provenir du centre de l’impact. Tous se précipitèrent pour voir le dernier commentaire et une clameur commençait à s’élever du peuple rustacé. Publié par un développeur de Rust, [il disait](https://www.reddit.com/r/rust/comments/362u7n/rust_10_is_here/) : « Rust 1.0 est là ! Merci beaucoup à tous les membres de la communauté et les contributeurs/trices. Ce fut long, mais je suis vraiment fier de ce que nous avons fait ensemble. Je vais finalement pouvoir dormir pour de vrai ce soir, je pense. » # Nouveautés ## Stabilité ! L’arrivée de Rust 1.0 est une très bonne nouvelle car la stabilité est garantie. Un code écrit pour Rust 1.0 compilera avec toute version 1.x sans changements majeurs. L’engagement de l’équipe de développement de Rust n’est donc pas de garantir une stabilité absolue, mais de rendre l’effort de mise à jour du code minimal (s’il est nécessaire). En particulier, l’équipe se réserve le droit de corriger les bogues du compilateur et les failles de sécurité ainsi que de modifier l’inférence de type d’une façon qui peut nécessiter de nouvelles annotations. Rien de bien méchant ! [Plus d’informations](http://blog.rust-lang.org/2014/10/30/Stability.html) La grande majorité de la bibliothèque standard est maintenant stable, et il n’est plus possible d’utiliser des fonctionnalités instables avec un version stable du compilateur et un grand nombre de bibliothèques populaires fonctionnent maintenant avec la version stable. ## Des chiffres ! Le dépôt [rust](https://github.com/rust-lang/rust) sur Github compte plus de 42 000 commits et plus de 1 000 contributeurs/trices. Au niveau des statistiques spécifiques à Github, le projet est suivi par presque 750 personnes et a été marqué d’une étoile par plus de 10 000 personnes. Il y a [plus de 7 000 dépôts sur Github utilisant le langage Rust](https://github.com/search?q=language%3Arust&type=Repositories). Pour comparaison : - 1 428 dépôts lors de la sortie de la version 0.10 - 3 262 dépôts lors de la sortie de la version 0.12 - 4 892 dépôts lors de la sortie de la version 1.0-alpha [OpenHUB](https://www.openhub.net/languages/rust) compte 200 projets en Rust, plus de 1 300 contributeurs/trices, près de 60 000 commits et plus de 1 200 000 lignes de code. Pour comparaison : - 121 projets lors de la sortie de la version 0.10 - 165 projets et 1 007 386 lignes de code lors de la sortie de la version 0.12 ## Gouvernance ouverte Le projet est un projet libre depuis le début et ces dernières années, ses membres ont continuellement travaillé à rendre la gouvernance du projet plus ouverte et tournée vers la communauté. Récemment, [un nouveau modèle de gouvernance a été adopté](https://github.com/rust-lang/rfcs/pull/1068). Celui-ci établit un ensemble de sous-équipes, chacune responsable des [RFC](#rfc-rust) et donc l’étude et l’implémentation de fonctionnalités dans un domaine particulier. Vous êtes bien entendu encouragé·e·s à vous impliquer, que ça soit en mettant en ligne vos bibliothèques sur [crates.io](//linuxfr.org/news/rust-1-0#cratesio), commenter les RFC ou [écrire du code pour Rust](https://github.com/rust-lang/rust/blob/master/CONTRIBUTING.md). ## Changements techniques Vous êtes invité·e·s à consulter directement le [journal des modifications](https://github.com/rust-lang/rust/blob/master/RELEASES.md) dont une partie des changements est affichée ci-dessous. Vous pouvez aussi consulter les entrées hebdomadaires de [This week in Rust](http://this-week-in-rust.org/). Les changement depuis la 1.0-alpha sont répertoriés dans [This week in Rust 66](http://this-week-in-rust.org/blog/2015/01/19/this-week-in-rust-66/) et suivantes (jusqu’à la 81 qui sortira le lundi 18 mai 2015). Vous y trouverez les listes des changements dans le compilateur et la bibliothèque standard, mais également les nouveaux/elles contributeurs/trices, les RFC approuvées et récemment créées, les nouveaux sites, articles, présentations et vidéos concernant Rust, les nouveaux projets, ainsi que les prochains évènements concernant Rust. Quelques changements en vrac : - [Plusieurs restrictions ont été ajoutées sur les traits](https://github.com/rust-lang/rfcs/blob/master/text/1023-rebalancing-coherence.md) pour rendre plus facile le changement de trait sans casser la compatibilité - L’analyse des chiffres en binaire et octal a été modifiée pour améliorer les messages d’erreurs et le comportement des macros - L’occultation (voir [Variable shadowing](https://en.wikipedia.org/wiki/Variable_shadowing) pour l’explication d’un phénomène similaire) d’une durée de vie est maintenant une erreur. - L’utilisation de `[unsafe_descructor]` est maintenant déconseillée en faveur du nouveau [`dropck`](https://github.com/rust-lang/rfcs/pull/769), permettant d’écrire du code beaucoup plus sûr. # Documentation, ressources & communauté ## Évènements Des rencontres Rust sont régulièrement organisées via [le groupe Meetup](http://www.meetup.com/Rust-Paris/), créé en mai 2014. Lors de ces évènements, vous pouvez assister à des conférences éclairs (_Lightning talks_) sur des projets concernant Rust, programmer avec d’autres enthousiastes ou simplement découvrir le langage. Le groupe compte presque 300 membres et les rencontres mensuelles regroupent généralement une trentaine de personnes. [Une _release party_ a été organisée vendredi 15 mai à Paris](http://www.meetup.com/Rust-Paris/events/219680068/) pour célébrer la sortie de la première version stable de Rust. Vous pouvez également consulter [la liste des _release party_ à travers le monde](https://www.reddit.com/r/rust/comments/35woll/list_of_worldwide_rust_10_meetups_amsterdam/). ## Apprentissage - Le guide officiel : [The Rust Programming Language](http://doc.rust-lang.org/nightly/book/) - Un autre guide : [Rust by Example](http://rustbyexample.com/) (« Rust par l’exemple ») - [La documentation de la bibliothèque standard Rust](http://doc.rust-lang.org/nightly/std/index.html). Beaucoup de nouveaux exemples ont été ajoutés. - [Tableau périodique des types Rust](http://cosmic.mearie.org/2014/01/periodic-table-of-rust-types/) ## Nouvelles - [Blog officiel](http://blog.rust-lang.org/) - Blog [This week in Rust](http://this-week-in-rust.org/) (« Cette semaine dans Rust ») - [Le blog de Servo](http://blog.servo.org/) peut aussi vous intéresser - [Twitter](https://twitter.com/rustlang) - Projets fait avec Rust : [Built with Rust](http://builtwithrust.com/) ## Développement La liste de discussion « rust-dev » a été arrêtée et est remplacée par le forum [Rust Internals](https://internals.rust-lang.org/). ## Entraide - [Forum des utilisateurs](https://users.rust-lang.org/) (utilisant Discourse) - [Questions étiquetés « rust » sur Stackoverflow](https://stackoverflow.com/questions/tagged/rust) - [Sous-reddit](https://www.reddit.com/r/rust) (qui compte plus de 10 000 inscrits) - IRC : [sur le web](https://chat.mibbit.com/?server=irc.mozilla.org&channel=%23rust), [lien pour client IRC](ircs://irc.mozilla.org/#rust) # Outils rustdoc a reçu beaucoup d’améliorations, en particulier pour compléter le logiciel et pour la finition. ## rustc - On peut obtenir une explication plus détaillée pour beaucoup d’erreurs en utilisant l’option `--explain` - Le format des métadonnées a été optimisé, [réduisant la taille de la bibliothèque standard de 27%](https://github.com/rust-lang/rust/pull/22971) ! ## Cargo Cargo est le gestionnaire de projets Rust, lui-même écrit en Rust. Il peut notamment récupérer et compiler les dépendances du projet, ainsi que compiler le projet, lancer les tests et lancer l’exécutable facilement. Le résultat est plutôt intéressant, à la fois simple et puissant. Exemple de fichier `Cargo.toml` (au [format TOML](https://github.com/toml-lang/toml)) : ```toml [package] name = "hello_world" version = "0.1.0" authors = ["Your Name "] [dependencies.color] git = "https://github.com/bjz/color-rs.git" ``` et d’utilisation de Cargo : ``` $ cargo run Compiling color v0.1.0 (https://github.com/bjz/color-rs.git#bf739419) Compiling hello_world v0.1.0 (file:///path/to/project/hello_world) Running `target/hello_world` [Sortie du programme] $ cargo test Compiling color v0.1.0 (https://github.com/bjz/color-rs.git#bf739419) Compiling hello_world v0.1.0 (file:///path/to/project/hello_world) Running target/test/hello_world-9c2b65bbb79eabce running 0 tests test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured ``` ## Crates.io [Crates.io](https://crates.io) est le dépôt de conteneurs (_crates_, l’équivalent des bibliothèques ou paquets dans d’autres langages). Il a passé le cap du million de téléchargements et répertorie plus de 1 700 conteneurs. Le site dispose d’un [guide sur l’utilisation de Cargo](http://doc.crates.io/guide.html). ## Le terrain de jeu Rust [_Rust Playground_](https://play.rust-lang.org/) est un site web qui permet de tester son code Rust en ligne. On entre le code Rust que l’on veut tester, et on obtient sa sortie en bas de l’écran. On peut choisir la version de Rust (_release_ c’est-à-dire la dernière version publiée officiellement ou _nightly_, dernière version de développement). Mais il y a d’autres options très intéressantes pour les développeurs/euses plus avancé·e·s : choisir entre le mode de compilation _debug_ ou _release_, obtenir le code intermédiaire LLVM ou le code assembleur du code Rust correspondant. On peut changer le thème de l’éditeur ainsi que le jeu de raccourcis claviers (par défaut, Emacs ou vim). L’outil est utilisé sur le canal IRC `#rust` sur `irc.mozilla.org`, via le robot `playbot` qu’on utilise de cette façon : `playbot: println!("Hello World!")`. Le robot donne alors la sortie du compilateur en cas d’erreur, sinon celle du programme; directement sur IRC ou via un lien si la sortie est trop longue. ![Ferris le crabe](http://www.rustacean.net/img/rustacean-orig-happy.png) [Ferris le crabe](http://www.rustacean.net/) (de la famille des rustacés), mascotte non-officielle de Rust, aime beaucoup le terrain de jeu comme vous pouvez le voir à son sourire ! # Futur ## RFC Rust À l’image des PEP (_Python Enhancement Proposals_, propositions d’amélioration de Python), les RFC ont pour but d’offrir un moyen cohérent et contrôlé de proposer de nouvelles fonctionnalités pour Rust, permettant aux parties prenantes de comprendre et surveiller l’évolution du langage. Pour avoir une idée des possibles futures fonctionnalités du langage, vous pouvez consulter [la liste des RFC en cours de discussion](https://github.com/rust-lang/rfcs#active-rfc-list). ## Optimisation des appels terminaux Fin 2013, on apprenait par un membre de l’équipe de Rust que l’optimisation des appels terminaux (_tail call optimization_), chère aux langages fonctionnels, [ne serait pas prise en charge par Rust](https://mail.mozilla.org/pipermail/rust-dev/2013-April/003557.html) car trop difficile à implanter. Pour information, lorsqu’une fonction s’appelle elle-même (appel récursif), chaque appel s’ajoute à la pile d’appel des fonctions. Celle-ci étant limitée, une fonction récursive s’appelant trop de fois provoque un dépassement de pile (_stack overflow_) qui fait planter le programme. Cette optimisation permet d’utiliser un espace constant dans la pile d’appels, pour peu que l’appel récursif soit terminal (c’est-à-dire la dernière instruction de la fonction). [Plus d’informations](https://stackoverflow.com/questions/310974/what-is-tail-call-optimization) Le [rapport de bug correspondant](https://github.com/rust-lang/rfcs/pull/81) a cependant été fermé en 2014 avec l’étiquette _postponed_ (reporté). Maintenant que 1.0 est sortie, les priorités sont différentes et cette optimisation pourrait arriver tôt ou tard dans le compilateur Rust. ## Priorités après la 1.0 - API de la bibliothèque standard : - API du système de fichier : le but est de l’intégrer rapidement dans Rust pour que Cargo puisse fonctionner avec une version stable de Rust. - API d’allocation mémoire : pouvoir allouer un tas d’octets serait très utile pour nombre de projets. Nous ne l’avons pas fait car il y a des inquiétudes quand à l’interaction avec les ramasse-miettes (voir plus bas). - De plus, l’équipe a pour projet de développer des bibliothèques ne faisant pas (nécessairement) partie de la bibliothèque standard mais remplissant un vide important (par exemple, un membre est intéressé par la création d’abstractions pour la programmation parallèle). - Meilleure prise en charge de Windows et d’ARM : Windows et ARM sont des marchés importants. Pour le premier, le but premier est de supprimer la dépendances à la chaine de compilation MingGW mais ça demande un certain travail. Pour le deuxième, la prise en charge d’ARM64 est la priorité. - Compilation plus rapides : beaucoup d’efforts ont été faits pour ajouter des fonctionnalités mais très peu pour optimiser. Il y a beaucoup de petites optimisations faciles mais aussi de gros gains possibles en ré-architecturant certaines parties du compilateur. Il y a par exemple du progrès à faire du côté de la compilation incrémentale et parallèle, et de l’inférence de type. - Rendre plus facile la distribution de bibliothèques et programmes Rust (créer une commande `cargo install`) - Intégration avec des outils externes : Rust a de bonnes informations de débogage mais ça pourrait être amélioré et ça serait bien d’avoir une intégration avec des outils de fuzzing, de couverture de code et de profilage. - _Dynamic drop_ : Implantation de cette [RFC](https://github.com/rust-lang/rfcs/pull/320) le plus tôt possible pour éviter que de mauvaises pratiques de programmation se basent sur le comportement actuel - Allocateurs/Traçage : offrir plus de possibilités de contrôle de la mémoire (différents types d’allocateurs dans différentes parties du programme, maitrise de l’allocateur global plus simple, équivalent à malloc et free, traçage les valeurs sur la pile afin d’intégrer des ramasse-miettes par exemple lors de la liaison avec d’autres langages, etc) - Spécialisation : permet d’avoir plusieurs implantations d’un trait pour un ensemble de types. Il y a de nombreuses situations où la spécialisation aide à contourner les limitations de cohérence ou améliore les performances. - Structs virtuelles : pour certains cas d’utilisation, ça serait très pratique. Cette fonctionnalité a déjà été proposée dans le passé et l’expérience a montré que la concevoir correctement est un problème épineux. Possiblement haute priorité : - Amélioration du vérificateur d’emprunt, notamment pour régler quelques problèmes faciles à contourner mais affectant beaucoup de nouveaux/elles utilisateurs/trices de Rust. Cela permettrait d’améliorer la première expérience avec Rust pour les débutant·e·s. - Macros et extensions de syntaxes améliorées : principalement améliorer les macros pour étendre leur champ d’application et les rendre plus puissantes. Par exemple, les macros ne peuvent pas interagir avec le système normal d’import/export du langage. Pour un résumé plus complet, comprenant notamment les priorités à moyen et long terme, vous pouvez consulter [la discussion correspondante](http://internals.rust-lang.org/t/priorities-after-1-0/1901).

AltStyle によって変換されたページ (->オリジナル) /