IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

Rust 1.1 disponible en version stable avec la bêta de Rust 1.2
Le langage de programmation de Mozilla améliore de 32% le temps de compilation

Le , par Hinault Romaric

136PARTAGES

9  0 
Les développeurs responsables du développement du langage de programmation Rust viennent d’annoncer la publication de la version 1.1, moins d’un mois et demi après la sortie de la première version stable de Rust.

Cette première itération de la branche 1.0 se concentre sur l’amélioration des performances de la plateforme. Rust 1.1 améliore de 32% le temps de compilation par rapport à Rust 1.0 (tel que mesurer par bootstrapping).

Des améliorations ont également été apportées aux messages d’erreurs lors de la compilation. Une grande partie des erreurs de compilation dispose désormais d’explications étendues qui s’affichent lorsqu’on clique sur le drapeau « -- ».

En dehors de ces améliorations, Rust 1.1 apporte de nouvelles fonctionnalités intéressantes, dont :

  • la disponibilité en version stable de la nouvelle API « std::fs » : cette fonctionnalité rend stable un grand nombre d’extensions pour les API du système de fichiers. Ce qui permet, par exemple, de compiler le gestionnaire de packages Cargo sur Rust ;
  • support de musl : il est désormais possible de cibler musl sur Linux. Les binaires générés de cette façon sont liés statiquement et n’ont aucune dépendance ;
  • l’intégration de cargo rustc : cette fonctionnalité permet de générer des packages Cargo en passant un drapeau pour invoquer rustc.


La sortie de cette version s’accompagne de la publication de la bêta de Rust 1.2, conformément au cycle de développement du langage de programmation.

Rust 1.2 bêta est disponible en téléchargement avec ses outils. L’amélioration des performances est également au centre de cette version. Grâce aux optimisations qui ont été apportées à cette dernière, sa vitesse de compilation est améliorée de 30% par rapport à Rust 1.1. La compilation pour Cargo est également plus rapide de 18%.

Le gestionnaire de packages du langage a bénéficié de plusieurs autres améliorations de performances.

Rust 1.2 bêta marque la première étape pour l’intégration de la prise en charge de MSVC (Microsoft Visual C). Selon les développeurs du langage, cela représente un grand pas pour la prise en charge de Windows et rend plus facile la liaison entre le code Rust et le code compilé en utilisant la chaine de compilation native.

Rust 1.2 sera publié en version stable dans six semaines, avec la version bêta de Rust 1.3.




À titre de rappel, Rust est un langage de programmation compilé, multiparadigme (orienté objet, fonctionnel et procédural) qui tire parti des langages fonctionnels comme Haskell et ML, du langage orienté objet C++ et bien plus.

Le but de Mozilla est de mettre à la disposition des développeurs « un langage orienté objet statique, typé, sûr, concurrentiel et efficace ». Selon la fondation Mozilla, il s’agit d’un nouveau langage de programmation visant à rendre plus facile le développement des systèmes fiables et efficaces.

Sur le site du projet, on peut lire en guise d’introduction que « Rust est un langage de programmation système qui fonctionne incroyablement rapidement, empêche presque toutes les erreurs de segmentation, et garantit la sécurité des threads. »

Ce qui rend Rust différent des autres langages de programmation est son système de type, selon Mozilla. Le langage fournit la sécurité et la commodité des langages modernes, tout en maintenant l’efficacité et le contrôle de bas niveau des langages C et C++.

Le langage de Mozilla semble disposer de plusieurs caractéristiques intéressantes. Mais, sont-elles suffisantes pour permettre à celui-ci de s’imposer dans l’écosystème de l’IT ?

Télécharger Rust 1.1 et Rust 1.2 bêta

Source : Blog Rust

Et vous ?

Avez-vous testé le langage de programmation Rust ? Qu’en pensez-vous ?

A-t-il du potentiel pour se faire une place devant les ténors ?

Allez-vous adopter ce langage ?

Une erreur dans cette actualité ? Signalez-nous-la !

Avatar de Crejak
Membre à l'essai https://www.developpez.com
Le 01/07/2015 à 16:02
Je connaissais le langage depuis la 0.9 (fin 2014) et je m'y suis remis après la sortie de la 1.0. C'est vrai qu'au début j'étais un peu sceptique mais une fois qu'on a compris la logique du compilateur, c'est vraiment un plaisir de l'utiliser. Quand par exemple le slogan dit "empêche presque toutes les erreurs de segmentation", c'est vrai ! Venant des langages C / C++ où les segfaults sont un véritable calvaire, et malheureusement assez fréquentes, Rust permet, en forçant à s'adapter au compilateur, de coder de telle sorte qu'il n'y ait jamais de pointeurs invalides, de buffer overflow... Et c'est vraiment très agréable qu'une fois notre code compilé, on est (quasiment) sûr qu'il ne plantera pas.
Cependant, le fait qu'il soit exigeant n'apporte pas que du bon. La gestion des chaînes de caractères par exemple est particulièrement tordue ^^. Mais encore une fois, quand on a compris comment ça marche, on peut faire de réeles économies de mémoire et de calculs (au prix de quelques heures passées sur la doc ).

A-t-il du potentiel pour se faire une place devant les ténors ?
Je pense que Rust a encore un peu de chemin à faire (beaucoup d'éléments de la bibliothèque standard sont marqués `unstable` par exemple, et le compilateur peut être encore largement optimisé), cependant je trouve que ce langage a un réel potentiel et peut être comparé aux "grands" langages compilés comme le C. Un point important est que Rust est un langage multi-paradigme et permet de coder de plusieurs façons différentes (fonctionnelle, orientée objet avec les traits/enums/structs...).
Un autre éléments valorisant ce langage est la mise à disposition d'outils permettant de compiler et de gérer ses projets simplement. Le logiciel cargo, fourni avec Rust sur le site (il me semble), est en effet un gestionnaire de projet complet. En le couplant avec un éditeur de texte (j'utilise personnellement Atom, sorti en 1.0 très récemment, qui compte déjà plusieurs plugins concernant Rust), on a un environnement de développement multi-plateformes et complet.

Allez-vous adopter ce langage ?
Comme je l'ai dit, j'ai déjà adopté ce langage et il est devenu un de mes outils principaux de développement. Dès que j'ai une idée de projet, un petit `cargo new` et c'est parti ! Alors je ne peux que vous encourager à le tester, d'autant que des tutoriels existent pour démarrer : doc.rust-lang.org/index.html.
5  0 
Avatar de psykokarl
Membre confirmé https://www.developpez.com
Le 01/07/2015 à 22:39
Citation Envoyé par Uther Voir le message
Le cas que tu cites n'est qu'une conséquence d'une propriété plus générale : touts les blocs qui ne se terminent pas par ";" retournent une valeur. Si cette propriété est déroutante dans les fonction où on a l'habitude de faire "return", elle prend tout son intérêt dans les autres types de blocs comme les "if" ou les closures, ... ou l'on a besoin d'une syntaxe plus légère.

Par exemple cela permet de faire:
Code : Sélectionner tout
1
2
let x = if x>0 {x} else {0};
let mut power= iter.map(|&x| {x * x});
Utiliser "return" dans une fonction est considéré comme tout à fait correct.
Autant le fait d'oublier un ";" me fait redouter un return non désirés (les pires des erreur de programmation sont celles qui sont syntaxiquement correctes...), autant l'avantage sur l’opérateur ternaire dans le cas de if ou de switch me parait évident en terme de lisibilité.
Pour les closures je ne suis pas convaincu, pour peu qu'elle se complexifient. L'idéal étant pour moi étant de garder les return obligatoire pour les fonction. Assez pratique pour retourner une ligne à l'arrache sans avoir a commenter ce qui suit...
2  0 
Avatar de psykokarl
Membre confirmé https://www.developpez.com
Le 02/07/2015 à 3:26
Citation Envoyé par Max Lothaire Voir le message
Je n'y avais pas pensé.
Du coup ça devient plus lisible qu'un
Code : Sélectionner tout
x = y==2 ? 4 : 1
Le return fonctionne tout à fait dans les fonctions, mais c'est considéré comme << poor style >> d'après la doc.
Après, ce n'est qu'un détail.
Si ce n'était que pour l'exemple simple de Uther, l’intérêt vis à vis de l’opérateur ternaire est quasi nul et de mon point de vue, ce n'est pas qu'une question de "poor style" ou de recommandation.

Si on compare
Code : Sélectionner tout
x = (x > 20) ? "geant" : (x > 15) ?  "grand" : (x > 10) ? "moyen" : (x > 5) ? "petit" : "minscule"
à
Code : Sélectionner tout
x = if (x > 20) "geant" elseif (x > 15) "grand" elseif (x > 10)  "moyen" elseif (x > 5) ? "petit" else "minscule"
Les deux expressions sont aussi faciles à lire mais la seconde est plus facile à manipuler (shunter une condition pour tester le comportement, ajouter une clause, générer du code dynamique)

C'est cette tendance à vouloir imposer un style qui fait que je n'adopterai jamais python en dépit de ses qualités.

A mon avis
Code : Sélectionner tout
x = if(rouge) x+=1 if(vert) x+=2 if(bleu) x+=4
dans le cadre d'expression courte

ou
Code : Sélectionner tout
1
2
3
4
x = if(rouge) x+=1 
    if(vert) x+=2 
    if(bleu) x+=4
    ...
dans le cadre d'expression longue

restent plus lisible, plus facilement shuntable que
Code : Sélectionner tout
1
2
3
4
x = if(rouge) x+=1 
        if(vert) x+=2 
            if(bleu) x+=4
                ....
parce que les deux premières me rappellent que je pensais a une variable complexe, calculée via une structure "linéaire" alors que pour la troisième, je ne peux pas savoir si il s'agit d'une variable complexe ou une variable alternative avant de lire le code.

Même délire avec les return
Code : Sélectionner tout
1
2
3
4
5
if(rouge) /*return*/ x+=1; 
if(vert) return  x+=2; 
if(bleu) return  x+=4;
...
return  x+=32;
De mon point de vue, ce n'est pas qu'une question de style dans le sens pour faire joli. Il y a une recherche d'efficience derrière...
2  0 
Avatar de Uther
Expert éminent sénior https://www.developpez.com
Le 17/04/2016 à 9:49
Citation Envoyé par Olivier Famien Voir le message
Toujours à propos des nouveautés de cette nouvelle version de Rust, l’équipe de Rust informe que des travaux sont en cours afin de mettre sur pied un nouvel outil pour construire les fichiers Rust. Depuis toujours, Make a été l’outil privilégié pour construire les programmes et bibliothèques Rust. Mais avec le succès de Cargo, un nouveau projet écrit avec Rust et basé sur Cargo a vu le jour avec pour objectif de remplacer Make dans la construction des fichiers et programmes Rust.

Abordant le volet de Cargo, l’on note quelques nouvelles mises à jour comme la commande cargo init qui peut être utilisée pour démarrer un projet Cargo dans le répertoire en cours d’utilisation au lieu de créer un nouveau sous-répertoire. Pour récupérer des données concernant un projet, les développeurs peuvent utiliser la nouvelle sous-commande cargo metadata. Enfin, les utilisateurs de Cargo peuvent configurer l’outil en mode verbeux ou mettre la couleur en mode automatique en utilisant les nouvelles options -v et --color.
Ce 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à.
2  0 
Avatar de Songbird
Membre expert https://www.developpez.com
Le 10/06/2017 à 18:41


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.
Qu'est-ce qui te paraît peu évident ? Tes questions et remarques sont les bienvenues.

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 !
2  0 
Avatar de Max Lothaire
Membre confirmé https://www.developpez.com
Le 01/07/2015 à 16:12
Avez-vous testé le langage de programmation Rust ? Qu’en pensez-vous ?
Je l'ai testé. Certains aspects de la syntaxe m'ont un peu perturbé.
Par exemple :
Code : Sélectionner tout
1
2
3
4
5
fn carre (x: i32) -> i64 
{
    x * x  // sans le ' ; '
}
qui serait une écriture recommandée en lieu et place du traditionnel << return x*x; >> que je trouve plus lisible.

Mais c'est surtout Cargo, l'outil de gestion de projet, que j'apprécie énormément (téléchargement automatique de dépendance, etc)


A-t-il du potentiel pour se faire une place devant les ténors ?

Allez-vous adopter ce langage ?
Ce qui fait le succès des autres langages, notamment le c et le c++, c'est le nombre de bibliothèques et de frameworks existants. (merci de me corriger si j'ai dit une bêtise)
J'attends de voir un ce qu'il y aura comme api graphiques par exemple.
1  0 
Avatar de ParseCoder
Membre averti https://www.developpez.com
Le 01/07/2015 à 16:15
Je n'ai pas encore codé avec ce langage mais il a l'air très intéressant. Il n'y a que les life time que je trouve un peu déroutant. Je n'arrive pas à me rendre compte si cela apporte un supplément de sémantique intéressant lorsqu'on lit le code, ou si ça permet seulement d'aider le compilo au prix d'un alourdissement du code.
Si quelqu'un a pratiqué suffisamment, je suis intéressé par son point de vue.
Merci.
1  0 
Avatar de unoomad
Membre du Club https://www.developpez.com
Le 01/07/2015 à 16:17
Citation Envoyé par Max Lothaire Voir le message
Je l'ai testé. Certains aspects de la syntaxe m'ont un peu perturbé.
Par exemple :
Code : Sélectionner tout
1
2
3
4
5
fn carre (x: i32) -> i64 
{
    x * x  // sans le ' ; '
}
qui serait une écriture recommandée en lieu et place du traditionnel << return x*x; >> que je trouve plus lisible.
Moi au contraire je préfère sans le return c'est ce que je suis habitué a faire en Ruby chacun ses préférences .
1  0 
Avatar de Uther
Expert éminent sénior https://www.developpez.com
Le 01/07/2015 à 17:21
Citation Envoyé par Max Lothaire Voir le message

Je l'ai testé. Certains aspects de la syntaxe m'ont un peu perturbé.
Par exemple x * x // sans le ' ; ' qui serait une écriture recommandée en lieu et place du traditionnel return x*x; que je trouve plus lisible.
Le cas que tu cites n'est qu'une conséquence d'une propriété plus générale : touts les blocs qui ne se terminent pas par ";" retournent une valeur. Si cette propriété est déroutante dans les fonction où on a l'habitude de faire "return", elle prend tout son intérêt dans les autres types de blocs comme les "if" ou les closures, ... ou l'on a besoin d'une syntaxe plus légère.

Par exemple cela permet de faire:
Code : Sélectionner tout
1
2
let x = if x>0 {x} else {0};
let mut power= iter.map(|&x| {x * x});
Utiliser "return" dans une fonction est considéré comme tout à fait correct.
1  0 
Avatar de Max Lothaire
Membre confirmé https://www.developpez.com
Le 02/07/2015 à 0:02
Citation Envoyé par Uther Voir le message
Le cas que tu cites n'est qu'une conséquence d'une propriété plus générale : touts les blocs qui ne se terminent pas par ";" retournent une valeur. Si cette propriété est déroutante dans les fonction où on a l'habitude de faire "return", elle prend tout son intérêt dans les autres types de blocs comme les "if" ou les closures, ... ou l'on a besoin d'une syntaxe plus légère.

Par exemple cela permet de faire:
Code : Sélectionner tout
1
2
let x = if x>0 {x} else {0};
let mut power= iter.map(|&x| {x * x});
Utiliser "return" dans une fonction est considéré comme tout à fait correct.
Je n'y avais pas pensé.
Du coup ça devient plus lisible qu'un
Code : Sélectionner tout
x = y==2 ? 4 : 1
Le return fonctionne tout à fait dans les fonctions, mais c'est considéré comme << poor style >> d'après la doc.
Après, ce n'est qu'un détail.
1  0