URL: https://linuxfr.org/news/rust-0-12-non-pas-le-jeu-video-le-langage Title: Rust 0.12 : non, pas le jeu vidéo, le langage ! Authors: Collectif ariasuni, BAud, olivierweb, GSurrel, Nÿco, Benoît Laurent, Nils Ratusznik, Nicolas Boulay, palm123, Thomas Debesse et Bruno Michel Date: 2014年10月06日T23:10:08+02:00 License: CC By-SA Tags: rust, mozilla, programmation et ubuntu Score: 35 Le langage de programmation Rust continue son bonhomme de chemin et se prépare à une version bêta 1.0 avant la fin de l'année. En attendant, Rust 0.12 est sorti le [9 octobre 2014](https://mail.mozilla.org/pipermail/rust-dev/2014-October/011267.html) ! Pour rappel, Rust est un langage de programmation système qui vise la performance et la sûreté. Il est développé par Mozilla, en parallèle d'un nouveau moteur expérimental de rendu de pages web écrit en Rust : [Servo](https://www.mozilla.org/en-US/research/projects/#servo). ![Rust](http://www.rust-lang.org/logos/rust-logo-256x256-blk.png) Rust est open source au sens de l'OSI et libre. Son développement est fait de façon ouverte sur [GitHub](https://github.com/rust-lang/rust) et le code source est publié sous double [licence Apache 2.0](http://www.gnu.org/licenses/license-list.html#apache2) et [[licence MIT]]. Pour une meilleure compréhension des détails techniques de cette dépêche et des évolutions de Rust, il est conseillé de se référer à [la dépêche sur Rust 0.8](https://linuxfr.org/news/presentation-de-rust-0-8) (ainsi qu’aux suivantes que vous trouverez via les tags `rust` et `langage_rust`). ---- [Site officiel de Rust](http://www.rust-lang.org/) [Annonce de la version 0.12](https://mail.mozilla.org/pipermail/rust-dev/2014-October/011267.html) [Tag `rust` sur LinuxFr.org (journaux et dépêches sur Rust) ](http://linuxfr.org/tags/rust/public) [Tag `langage_rust` sur LinuxFr.org](http://linuxfr.org/tags/langage_rust/public) [Le guide de Rust, idéal pour découvrir le langage](http://doc.rust-lang.org/guide.html) ---- ![rouille](http://upload.wikimedia.org/wikipedia/commons/9/95/Rust.rost.JPG) # Évolutions Depuis sa première sortie en 2012 (voir la [dépêche sur la version 0.1](https://linuxfr.org/news/sortie-de-la-version-0-1-de-rust)), le langage a connu un développement rapide en intégrant des fonctionnalités qui incluent les types de données algébriques, les fermetures, l'inférence de type, la sécurité de la mémoire garantie et un environnement d'exécution minimal. Depuis la [version 0.11](https://linuxfr.org/news/encore-une-couche-de-rouille-avec-rust-0-11), les spécifications du langage ont peu changé. ## Principaux changements Voici une liste laconique des apports majeurs : - les annotations de durées de vie ne sont plus obligatoires dans plusieurs cas communs ; - clauses `where` ; - notation pour les tranches. C’est un opérateur surchargeable ; - travail sur les types à taille dynamique ; - plein d’autres RFC implantées, par exemple : - [déclaration if-let](https://github.com/rust-lang/rfcs/blob/d2c2f0f524df814d7b38f69311ab67f41c2ec3ec/complete/0051-if-let.md) ; - [suppression du _runtime_](https://github.com/rust-lang/rfcs/blob/d2c2f0f524df814d7b38f69311ab67f41c2ec3ec/active/0062-remove-runtime.md). ## Prochains changements avant la version 1.0 Il y a un an, la version 1.0 était prévue pour la fin 2014. La [feuille de route](https://docs.google.com/a/octayn.net/spreadsheet/ccc?key=0AlWBWplsaTZvdGdSdEVzZW1BeDA5dm0zM2FFeW0ySEE&usp=drive_web#gid=0) se remplit petit à petit. Cependant, il reste quelques points (attention, c’est un peu technique) : * types de taille dynamique : cette [extension](https://github.com/rust-lang/rust/commit/7932b719ec2b65acfa8c3e74aad29346d47ee992) du système de type permet de gérer des types à taille fixe mais non connue à la compilation ; * fermetures _unboxed_ ; * types associés ; * clauses _where_ ; * traits _Multidispatch_ ; * destructeurs ; * _threads_ verts ([green thread](https://en.wikipedia.org/wiki/Green_threads)). On trouve également des discussions sur les RFC pour [implanter de l’héritage dans Rust](http://discuss.rust-lang.org/t/summary-of-efficient-inheritance-rfcs/494). # Plateformes prises en charge Rust fonctionne sous Windows (7, 8, Server 2008 R2) seulement x86, Linux (diverses distributions) ARM, x86 et x86-64, OSX 10.7 ("Lion") et ultérieurs x86 et x86-64, ainsi qu'Android. Nouveauté toute fraîche, un portage pour [Dragonfly BSD a été réalisé avec succès](http://www.ntecs.de/blog/2014/07/29/rust-ported-to-dragonflybsd/). Les procédures d'installation déjà en place pour la version 0.8 (pour Windows, Ubuntu, Arch Linux et Gentoo) décrites dans la [dépêche d'il y a un an](http://linuxfr.org/news/presentation-de-rust-0-8#tester-ou-faire-des-trucs-s%C3%A9rieux-avec-rust) sont toujours valables et ont été mises à jour pour cette version. Dès l'annonce, les paquets pour Ubuntu ont été générés dans le PPA `hansjorg/rust`, une compilation pour Arch est disponible dans le dépôt `[community]` et pour Gentoo, l'overlay `rust` contient un ebuild pour cette version. Le guide — qui remplace le tutoriel — détaille aussi l'[installation](http://static.rust-lang.org/doc/master/guide.html#installing-rust) sur les différentes plateformes. # Des chiffres ! ## Projets utilisant Rust OpenHub (anciennement Ohloh) tient des [statistiques](https://www.openhub.net/languages/rust) sur l'utilisation de Rust dans les projets qu'il recense, comme pour tout autre langage. On peut ainsi voir que le nombre de personnes qui modifient du code Rust est [relativement faible, mais augmente](https://www.openhub.net/languages/compare?l0=rust&measure=contributors&percent=false) (de 121 projets pour la version [0.10](https://linuxfr.org/news/rust-s-oxyde-en-version-0-10#chiffres) à 165 dans les projets recensés et 1 007 386 lignes de code). Par ailleurs, le nombre de projets recensés sur GitHub passe de 1428, lors de la sortie de la 0.10, à [3262](https://github.com/search?q=language%3Arust&type=Repositories). ## Computer Language Benchmark Game Tout d’abord, quelques rappels sur le *Computer Language Benchmark Game*. C’est un test de performance entre différents langages sur différents tests. Le code source destiné au test pour chaque langage doit utiliser le même algorithme. Lors de son entrée dans ce fameux test, mentionnée dans la dépêche sur [0.10](https://linuxfr.org/news/rust-s-oxyde-en-version-0-10#computer-language-benchmark-game), Rust montrait des performances inégales en fonction des tests, bons pour [fasta](http://benchmarksgame.alioth.debian.org/u64q/performance.php?test=fasta#about) (génération et écriture de séquences ADN aléatoires dans le format [FASTA](FASTA_(format_de_fichier))) (aussi bon que C++) mais mauvais pour [pidgits](http://benchmarksgame.alioth.debian.org/u64q/performance.php?test=pidigits#about) (calcul de décimales de pi). Avec la dernière version, le test sur [pidgits](http://benchmarksgame.alioth.debian.org/u64/benchmark.php?test=pidigits&lang=all&data=u64) place le langage à égalité en première place avec le C, avec tout de même une plus grande consommation mémoire. Le langage est même [plus performant que C++](http://benchmarksgame.alioth.debian.org/u64q/benchmark.php?test=all&lang=rust&lang2=gpp&data=u64q) pour la moitié des tests. Pour plus de détails sur les différents tests (algorithme, codes source pour les différents langages), vous pouvez consulter [la page qui liste tous les tests](http://benchmarksgame.alioth.debian.org/). # Outils ## Gestionnaire `cargo` [*Cargo*](http://doc.crates.io/) s'occupe de télécharger les dépendances nécessaires au projet, teste le projet, démarre la compilation (et le binaire). Par exemple, on peut commencer un nouveau projet avec `cargo new bonjour_monde --bin`. L'exécution est immédiatement possible avec `cargo run`. ### Tests Rust est livré avec [un système de tests](http://doc.rust-lang.org/guide.html#testing) natif. Il prend la forme de directives directement intégrées dans le code source pour les tests unitaires, alors que les tests d'intégration nécessitent la création d'un fichier dédié. L'exécution des tests fait appel à `cargo` *via* un simple `cargo test`. ## Documentation `rustdoc` Un autre utilitaire est livré gratuitement avec Rust : [`rustdoc`](http://doc.rust-lang.org/guide.html#comments) permet de générer une jolie documentation écrite en Markdown. La syntaxe ne sera déroutante ni pour les moules, ni pour les utilisateurs de GitHub et StackExchange : ```rust /// `bonjour` est une fonction qui souhaite le bonjour à la personne spécifiée en paramètre /// /// # Arguments /// /// * `nom` - Le nom de la personne que vous souhaitez accueillir. /// /// # Exemple /// /// ```rust /// let nom = "Roger"; /// bonjour(nom); // Affiche "Bonjour, Roger!" /// ``` fn bonjour(nom: &str) { println!("Bonjour, {}!", nom); } ``` ## Formatage À la manière de `gofmt`, [`rustfmt`](https://github.com/Ryman/rustfmt) permet de standardiser la manière d'écrire du rust. C'est encore en développement, mais il est possible de le voir en action quand on utilise [play.rust-lang.org](http://play.rust-lang.org/?code=fn%20main%28%29%0A{%0A%20%20%20%20%2F%2FCe%20code%20souhaite%20le%20bonjour%20%C3%A0%20Roger%0Alet%20nom%3D%20%22Roger%22%20%20%20%3B%0Aprintln!%28%22Bonjour%2C%20{}%20!%22%20%2Cnom%20%20%29}) et qu'on appuie sur le bouton `format`. ## Des frameworks web De nombreuses bibliothèques sont disponibles, seulement elles ne sont [pas encore stabilisées](http://arewewebyet.com/). On compte par exemple, les cadriciels [Iron](https://github.com/iron/iron/) et [nickel.rs](https://github.com/nickel-org/nickel.rs). Il existe cependant quelques essais de développements, notamment [TodoMVC](https://github.com/steveklabnik/rustmvc), qui utilisent nickel.rs. # Liens * [Le blog de Rust](http://blog.rust-lang.org/) ; * [forum du site officiel](http://discuss.rust-lang.org/) ; * [this week in Rust](http://this-week-in-rust.org/) ; * [une comparaison entre Rust, Haskell et Go] (http://yager.io/programming/go.html) * [Reddit - The Rust programming language](http://www.reddit.com/r/rust) * _Le subreddit de rust est actif et compte la présence de développeurs rust et servo d'où des réponses en général très pointues. Des exemples de liens passés sur le subreddit :_ * [Rust Means Never Having to Close a Socket](http://blog.skylight.io/rust-means-never-having-to-close-a-socket/) ; * [why your first FizzBuzz implementation may not work: an exploration into some initially surprising but great parts of Rust](http://chrismorgan.info/blog/rust-fizzbuzz.html). ## Notes de version * Le [Wiki](https://github.com/mozilla/rust/wiki/Doc-detailed-release-notes) dispose de notes de versions détaillées ; * le fichier [RELEASES.txt](https://github.com/mozilla/rust/blob/master/RELEASES.txt) contient aussi des informations sur cette version. # Conclusion Depuis le début, le _design_ de Rust a beaucoup été simplifié. Les différents symboles indiquant un type de pointeur, à part `&` et `&mut`, ont disparu, les clôtures prennent en charge moins d’options, etc. Ceci ne s’est pas fait au détriment de la praticité : on peut en faire autant qu’avant, voire plus. Tout ces changements sont articulés autour des concepts centraux de propriété et d’emprunt. Introduit pour partager efficacement des données entre tâches, il s’est révélé que cela a permis de déplacer beaucoup de choses dans des bibliothèques. Rust est donc maintenant beaucoup plus proche du métal qu’il n’était possible de l’imaginer avant. Toutes les constructions du langage se traduisent directement en opérations machines et le *runtime* est optionnel, permettant d’écrire (par exemple) des noyaux de système d’exploitation. Note : le *runtime* est nécessaire pour la gestion des tâches, les pointeurs gérés par un ramasse-miettes, etc. — tout ce qui n’est pas géré par le programme ou les bibliothèques et nécessite un peu de gestion de l’extérieur.

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