Rust s'approche de sa première version stable
Mozilla publie une nouvelle préversion de son langage dérivé de C/C++

Le , par Hinault Romaric

0PARTAGES

3  0 
Avec Rust, Mozilla ambitionne de renvoyer dans les tiroirs les célèbres langages de programmation C et C++, en proposant un langage qui s’inspire de ce qui a fait leur succès, mais qui propose en plus une meilleure sécurité.

L'objectif de Mozilla est de « concevoir et implémenter un langage orienté objet statique, typé, sûr, concurrentiel et efficace ».

Rust a été développé à la base comme un projet autonome par Graydon Hoare, de la fondation Mozilla, en 2006. Le langage a été dévoilé publiquement en 2010 et est sorti en version 0.1 pour les « early adopters » en janvier 2012.




Mozilla vient de publier la version 0.9 du langage, qui marque probablement la dernière étape avant la publication de la version stable 1.0. Rust 0.9 apporte un lot d’améliorations, dont la possibilité pour les développeurs de choisir s’ils veulent construire des bibliothèques dynamiques ou statiques.

Les bibliothèques natives sont désormais des éléments de « première classe », ce qui permet de développer et distribuer une bibliothèque Rust sans que les bibliothèques natives ne soient incluses dans le package.

Les développeurs de Rust ont procédé à une révision complète de l’infrastructure d’E/S. Toutes les fonctionnalités d’E/S sont désormais disponibles au niveau de std::io, qui a été entièrement réécrit. À ce niveau, Rust s’enrichit de deux nouvelles bibliothèques : libgreen et libnative.

Des changements ont également été apportés à la façon dont les pointeurs sont traités.

Rust est disponible en open source pour Windows, Linux, Mac OS X et FreeBSD. La version 1.0 du langage sortira avant la fin de l’année.

Télécharger Rust 0.9

Source : notes de version

Et vous ?

Avez-vous testé Rust ? Allez-vous l’adopter ?

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

Avatar de codec_abc
Membre averti https://www.developpez.com
Le 17/01/2014 à 17:18
J' ai du mal à trouver des informations quant à la rétro-compatibilité de Rust avec le C/C++. (Je pense que pour le C c'est quasiment certain, mais pour le C++ j'ai des doutes) C'est pour moi une grosse différence, parce que le langage a beau être prometteur sur le papier, s'il ne peut pas utiliser toutes les librairies C/C++ disponibles à ce jour ca reste un sacré frein à son adoption.

EDIT: au vue du précédent message je crois bien que j'ai ma réponse.
Avatar de Uther
Expert éminent sénior https://www.developpez.com
Le 19/01/2014 à 9:23
Citation Envoyé par Hinault Romaric Voir le message
Mozilla vient de publier la version 0.9 du langage, qui marque probablement la dernière étape avant la publication de la version stable 1.0.
En fait la prochaine version sera une 0.10 et il y aura probablement une 0.11 ensuite. A partir de la version 1.0 Rust devra gérer la compatibilité ascendante et il reste encore trop de changements incompatibles prévus pour les mois à venir.
L'équipe qui travaille sur Rust a annoncé quelle envisage de pouvoir sortir la version 1.0 de Rust vers fin 2014.

Citation Envoyé par Hinault Romaric Voir le message
Avez-vous testé Rust ? Allez-vous l’adopter ?
J'ai un peu joué avec, le principe me plait beaucoup, et je pense que je l'utiliserai pour des projets personnels lorsqu'il sera stable.

Pour le travail, je verrai si j'ai une bonne occasion de le pousser quand il sera stable, mais comme je travaille surtout sur des applications web et que les performances et la sécurité ne sont que rarement nos soucis principaux, j'en doute.

Citation Envoyé par codec_abc
J' ai du mal à trouver des informations quant à la rétro-compatibilité de Rust avec le C/C++. (Je pense que pour le C c'est quasiment certain, mais pour le C++ j'ai des doutes) C'est pour moi une grosse différence, parce que le langage a beau être prometteur sur le papier, s'il ne peut pas utiliser toutes les librairies C/C++ disponibles à ce jour ca reste un sacré frein à son adoption.
L’interfaçage avec du C marche déjà parfaitement bien et le langage a été prévu pour que ça soit très simple a mettre en œuvre. Il est tout de même conseillé de faire un wrapper en Rust pour gérer la sécurité, le code C étant considéré comme "unsafe".

Actuellement si on souhaite utiliser du code C++, il faut d'écrire un wrapper en C++ qui fournira à Rust une interface C (extern "C".

Le support direct et complet du C++ n'est pas vraiment possible car il y a des différences incompatibles dans la manière dont chaque langage gèrent les objets. A ma connaissance aucun langage ne le propose. Le D fournit un support limité de l’interfaçage avec C++ et les gens qui travaillent sur Rust envisagent de fournir quelque chose d'approchant à l'avenir, mais ça sera après Rust 1.0.
Avatar de _skip
Expert éminent https://www.developpez.com
Le 19/01/2014 à 9:35
Avec l'annonce récente de M# par microsoft, le D qui pourrait finalement sortir de sa grotte avec l'aide de facebook et Rust qui s'approche d'une version stable, on risque d'avoir 3 technos qui s'attaquent en même temps au même segment. Comme si tout le monde avait réalisé en même temps qu'il existait un gros vide entre le C++ et java/.Net.

Je suis globalement très enthousiaste pour Rust mais la bataille risque d'être rude.
Avatar de codec_abc
Membre averti https://www.developpez.com
Le 19/01/2014 à 12:09
Citation Envoyé par Uther
Le support direct et complet du C++ n'est pas vraiment possible et a ma connaissance aucun langage ne la propose. Le D fournit un support limité de l’interfaçage avec C++ et les gens qui travaillent sur Rust envisagent de fournir quelque chose d'approchant à l'avenir, mais ça sera après Rust 1.0.

Techniquement l’interfaçage complet et direct avec C++ n'est pas possible, cependant on peut tout a fait utiliser du code C++ à condition d'écrire un wrapper en C++ qui fournira à Rust une interface C (extern "C".
Effectivement c'est la même solution que la totalité des autres langages qui veulent s'interfacer avec du C++. Dans la pratique, vu que c'est quelque chose que je n'ai jamais fait, comment ca se passe ? J'imagine qu'il faut d'abord compiler la librairie C++ avec le compilo de son choix. Puis linker son wrapper C avec la libraire précédemment compilé. Enfin, on peut linké son exécutable (ou sa librairie) écrit en Rust avec le wrapper. Ça me semble assez lourd comme processus. En plus, je vois un problème avec les librairies en évolution. Leur API changeant régulièrement il faut réécrire le wrapper et une partie du code Rust qui y fait appel.

Citation Envoyé par _skip

Avec l'annonce récente de M# par microsoft, le D qui pourrait finalement sortir de sa grotte avec l'aide de facebook et Rust qui s'approche d'une version stable, on risque d'avoir 3 technos qui s'attaquent en même temps au même segment. Comme si tout le monde avait réalisé en même temps qu'il existait un gros vide entre le C++ et java/.Net.

Je suis globalement très enthousiaste pour Rust mais la bataille risque d'être rude.
Il me semble qu'il y ai une différence notable entre Rust, D et M#. C'est que M# doit produire du byte code tandis que D et Rust produisent du code natif. D'ailleurs on peut aussi rajouter Go à la liste des nouveaux langages ayant pour but de "remplacer" C++.
Avatar de Uther
Expert éminent sénior https://www.developpez.com
Le 19/01/2014 à 17:41
Citation Envoyé par codec_abc  Voir le message
Effectivement c'est la même solution que la totalité des autres langages qui veulent s'interfacer avec du C++. Dans la pratique, vu que c'est quelque chose que je n'ai jamais fait, comment ça se passe ?

Certaines bibliothèque C++ fournissent déjà une interface compatible C. Si ce n'est pas le cas, il faudra réaliser soi même cette interface.
Le principe est assez simple : dans un programme C++ les fonctions déclarées extern "C" sont compilées avec une ABI compatible C. Elles sont donc utilisables dans les langages qui acceptent de s'interfacer avec le C.
Le prototype de ces fonctions ne doit pas utiliser des fonctionnalités qui n'existent pas en C, mais le corps de la fonction le peux.

Par exemple supposons la classe C++ suivante:
Code C++ : Sélectionner tout
1
2
3
4
5
6
7
// MaBibliotheque.h : Bibliothèque C++ 
class MaClasse { 
  public: 
    MaClasse(int x); 
    void methode1(int x); 
    int methode2(int x, int y); 
}

On va pouvoir coder (toujours avec un compilateur C++) des fonctions avec une interface C qui utilisent cet objet :
Code C++ : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// MaBibliotheque_C.cpp : Wrapper C++/C  
#include "MaBibliotheque.h" 
  
extern "C" { 
  void* MaClasse_new(int x){ 
      return new MaClasse(x); 
  } 
  
  void MaClasse_methode1(void* object, int x){ 
      ((MaClasse*)object)->methode1(x); 
  } 
  
  int MaClasse_methode2(void* object, int x, int y){ 
      return ((MaClasse*)object)->methode2(x,y); 
  } 
}

Puis utiliser ça dans un programme rust:
Code Rust : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
#[link(name = "MaBibliotheque_C")] 
extern { 
    fn MaClasse_new(libc::c_int) -> libc::c_void; 
    fn MaClasse_methode1(ptr : libc::c_void, x : libc::c_int); 
    fn MaClasse_methode2(ptr : libc::c_void, x : libc::c_int, y : libc::c_int) -> int; 
} 
  
fn main () { 
    /* code utilisant les fonctions */ 
}


Citation Envoyé par codec_abc  Voir le message
Il me semble qu'il y ai une différence notable entre Rust, D et M#. C'est que M# doit produire du byte code tandis que D et Rust produisent du code natif. D'ailleurs on peut aussi rajouter Go à la liste des nouveaux langages ayant pour but de "remplacer" C++.

On ne sait pour le moment pas grand chose de M# (d'ailleurs ce n'est certainement pas son nom officiel), mais du peu que j'ai lu, il semblerait qu'il soit bien compilé en code natif.
D et surtout Go sont moins orientés vers les systèmes et la sécurité que Rust : pas de protection contre les accès concurrents aux données, pointeurs null, gestion mémoire, GC obligatoire ou très difficilement évitable ...
Avatar de codec_abc
Membre averti https://www.developpez.com
Le 19/01/2014 à 19:19
Merci pour la réponse. C'est bien comme ca que je l'imaginai. Je pense que ça ne doit pas être un travail passionnant pour la plupart des gens. Ceci dit, Il me semble qu'il existe des outils pour le faire automatiquement mais généralement le code produit n'est pas d'une qualité remarquable.

Sinon a propos de Rust, il me semble que le langage n'intègre pas de garbage collector. À mon niveau, ca veut dire que l'on va retrouver les problématiques de fuites mémoire dans Rust. Ça serait un peu dommage pour un langage qui se veut "sécurisé".
Avatar de Uther
Expert éminent sénior https://www.developpez.com
Le 19/01/2014 à 21:53
Citation Envoyé par codec_abc Voir le message
Sinon a propos de Rust, il me semble que le langage n'intègre pas de garbage collector. À mon niveau, ca veut dire que l'on va retrouver les problématiques de fuites mémoire dans Rust. Ça serait un peu dommage pour un langage qui se veut "sécurisé".
En fait c'est tout le contraire : c'est un langage qui propose un contrôle précis de la durée de vie de la mémoire allouée pour permettre d'éviter les fuites, sans avoir besoin de recourir a un GC.
Ceci dit si tu ne veux pas réfléchir au problème de durée de vie des variables, il est possible de recourir à des pointeurs avec GC ou avec compteur de références. C'est par contre totalement optionnel et rien dans les bibliothèques standard ne t'oblige a les utiliser.
Avatar de partok
Futur Membre du Club https://www.developpez.com
Le 25/01/2014 à 15:56
Dans le style de Rust, mais encore plus confidentiel, un langage que j'apprécie beaucoup : Nimrod dont j'ai entendu parler pour la première fois ici.
Avatar de WorkInProgress
Membre à l'essai https://www.developpez.com
Le 26/01/2014 à 20:31
Je viens de regarder Nimrod et la syntaxe est vraiment légère et à l'air quand même riche en possibilité. Ça fait penser à une sorte de python compilable. Ça me plait beaucoup aussi.
En ce qui concerne Rust, ça à l'air vraiment prometteur, et si ça marche bien, ça ne pourra être que bénéfique pour la fondation.
Il y a des petits truc sympas du genre :
Code : Sélectionner tout
1
2
3
4
5
6
7
8
let price =
    if item == "salad" {
        3.50
    } else if item == "muffin" {
        2.25
    } else {
        2.00
    };
ou encore :
Code : Sélectionner tout
let c = 100u;
pour forcer le typage des variable.
Mais ça reste un langage pour pro à mon avis parce que ce genre de structure fait gagner du temps mais ne rend pas l'apprentissage plus facile. Et dans l'ensemble l'apprentissage de ce langage doit être aussi laborieux que celui du C, voir encore plus étant donné le peu de doc qui existe pour l'instant (ce qui est bien normale vu la différence d'age des deux langages).
Avatar de gangsoleil
Modérateur https://www.developpez.com
Le 27/01/2014 à 9:40
Citation Envoyé par Hinault Romaric Voir le message
Avec Rust, Mozilla ambitionne de renvoyer dans les tiroirs les célèbres langages de programmation C et C++, en proposant un langage qui s’inspire de ce qui a fait leur succès, mais qui propose en plus une meilleure sécurité.

[...]
Rust est disponible en open source pour Windows, Linux, Mac OS X et FreeBSD. La version 1.0 du langage sortira avant la fin de l’année.
Les entreprises pour lesquelles j'ai travaille ont des clients sous differents linux (Red-Hat, Debian, Oracle, ...), Windows, Solaris, AIX, et HP-UX. Il manque donc au moins 3 cibles, et je n'ai pas vu de possibilite de telecharger juste les libs pour l'execution...

A mon sens, quelle que soit la qualite du langage, il n'est pas du tout oriente pour le monde professionnel actuellement.
Contacter le responsable de la rubrique Accueil

Partenaire : Hébergement Web