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

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langages de programmation Discussion :

Vers un C++ plus sûr ? La communauté C++ contre-attaque avec les extensions Safe C++


Sujet :

Langages de programmation

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Chroniqueur Actualités
    Avatar de Bruno
    Homme Profil pro
    Rédacteur technique
    Inscrit en
    Mai 2019
    Messages
    2 117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Rédacteur technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mai 2019
    Messages : 2 117
    Par défaut Carbon, le nouveau langage de programmation lancé par Google peut-il remplacer le C++ mieux que Rust ?
    Carbon, le nouveau langage de programmation lancé par Google peut-il remplacer le C++ mieux que Rust ?
    Carbon est destiné aux développeurs qui disposent déjà de bases de code importantes en C++

    Frustrés par la lenteur de l'évolution du C++, les ingénieurs de Google ont lancé un nouveau langage de programmation open source « expérimental », appelé Carbon, qui pourrait succéder au vénérable C++ qui, pour certains, serait vieillissant. « Il est difficile pour les grands projets de convertir les bases du code C++ existantes en Rust », affirment les ingénieurs de Google.

    Chandler Carruth, ingénieur logiciel principal de Google, a présenté Carbon cette semaine lors de la conférence C++ CPP Northà Toronto. Selon certains observateurs, « la nouvelle version de Carbon devrait être interopérable avec le populaire code C++, mais pour les utilisateurs qui souhaitent passer à la vitesse supérieure, la migration devrait être assez facile. » Pour ceux qui ne sont pas sûrs de vouloir changer complètement, Carruth a expliqué plus en détail certaines des raisons pour lesquelles Carbon devrait être considéré comme un successeur puissant du langage C++, notamment une grammaire plus simple et des importations d'API plus fluides.

    Les ingénieurs de Google construisent déjà des outils pour traduire C++ en ce nouveau langage. Bien que Carbon ait commencé comme un projet interne de Google, l'équipe de développement souhaite réduire les contributions de Google, ou de toute autre entreprise, à moins de 50 % d'ici la fin de l'année. Les concepteurs veulent publier une version de base 0.1 d'ici la fin de l'année. Carbon sera construit sur une base de principes de programmation modernes, notamment un système générique, qui supprimerait la nécessité de vérifier et revérifier le code pour chaque instanciation.

    La sécurité de la mémoire est une autre fonctionnalité indispensable qui fait défaut au C++. Les bogues d'accès à la mémoire sont l'une des principales causes d'exploitation de la sécurité. Les concepteurs de Carbon chercheront des moyens de mieux suivre les états non initialisés, de concevoir des API et des idiomes qui prennent en charge les vérifications dynamiques des limites et de créer un mode de construction de débogage par défaut complet. Les concepteurs prévoient de construire un sous-ensemble sûr de Carbon. Selon la documentation, le langage supportera :

    • développement rapide et évolutif ;
    • les logiciels à performances critiques ;
    • l'évolution des logiciels et du langage ;
    • un code facile à lire, à comprendre et à écrire ;
    • des mécanismes de sécurité et de test pratiques ;
    • plateformes OS modernes, architectures matérielles et environnements ;
    • interopérabilité avec le code C++ existant et migration à partir de celui-ci.
    L'équipe de développement s'attachera également à créer un gestionnaire de paquets intégré, ce qui fait cruellement défaut au C++.

    Voici un code C++ traduit en Carbon. Tout d'abord, le code C++ :

    Nom : cod.png
Affichages : 172136
Taille : 43,3 Ko

    Voici la même fonction écrite en carbone :

    Nom : cod2.png
Affichages : 29023
Taille : 42,9 Ko

    Carbon pourra mieux remplacer le C++ que Rust ?

    Rust est un langage de programmation compilé multiparadigme, conçu par Graydon Hore alors employé chez Mozilla Research, avec la contribution du créateur de JavaScript Brendan Eich. Utilisé par plusieurs grandes entreprises et par de nombreux développeurs dans le monde, Rust est devenu le langage de base pour certaines des fonctionnalités fondamentales du navigateur Firefox et de son moteur Gecko, ainsi que pour le moteur Servo de Mozilla.

    Microsoft

    Microsoft fait partie des membres fondateurs de la fondation Rust et dit vouloir collaborer avec la communauté pour continuer à améliorer le langage. L’entreprise promet de fournir des outils, une bibliothèque pour le langage et des ressources d’apprentissage.

    Selon Nell Shamrell Harrington, Ingénieur logiciel chez Microsoft et directeur du conseil d'administration de la Fondation Rust, les logiciels et les langages open source sont d'une importance capitale pour son entreprise et pour l'ensemble de l'industrie technologique.

    En outre, Microsoft a récemment formé une équipe Rust pour contribuer aux efforts d'ingénierie de l'écosystème du langage. L’entreprise spécialisée dans le développement de logiciel prévoit de travailler avec la communauté Rust sur le compilateur, les outils de base, la documentation et bien plus.

    Google

    Dans une annonce faite sur son blog ce 8 février, Google dit être ravie d’avoir rejoint la fondation Rust et se dispose pour travailler sur des questions comme l'interopérabilité avec C++. « S'appuyant sur les investissements de longue date de Google dans le C/C++ et les compilateurs et chaînes d'outils, nous sommes ravis d'annoncer notre adhésion à la fondation Rust », a annoncé Google sur son blog. « Nous sommes impatients de participer davantage à la communauté Rust, en particulier de travailler dans l'ensemble sur des questions importantes, notamment l'interopérabilité avec C++, la coordination des examens de sécurité, la réduction des coûts des mises à jour et de continuer à accroître nos investissements dans les projets Rust existants », a ajouté l'entreprise.

    Selon Google, les défauts de sécurité de la mémoire menacent fréquemment la sécurité des appareils, en particulier pour les applications et les systèmes d'exploitation. Par exemple, sur le système d'exploitation mobile Android, Google dit avoir constaté que plus de la moitié des vulnérabilités de sécurité traitées en 2019 résultaient de bogues de sécurité de la mémoire. Et ce, malgré les efforts considérables déployés par l'entreprise et d'autres contributeurs au projet Open Source Android, pour investir ou inventer diverses technologies, notamment l'AddressSanitizer, des allocateurs de mémoire améliorés et de nombreux fuzzers et autres outils de vérification du code.

    Amazon Web Service (AWS)

    Amazon a pour sa part clairement reconnu qu’elle est principale bénéficiaire du langage Rust et des travaux de sa communauté. L'entreprise se dit heureuse de pouvoir participer aux futurs succès de Rust. Selon Shane Miller, responsable de l'équipe Rust chez AWS et également professeur d'université, la raison pour laquelle les ingénieurs choisissent Rust pour créer des services est que cela leur permet d'offrir aux clients des expériences qui répondent à leurs exigences de qualité et de sécurité beaucoup plus rapidement et à moindre coût.

    AWS utilise Rust pour fournir des services tels qu'Amazon Simple Storage Service (Amazon S3), Amazon Elastic Compute Cloud (Amazon EC2), Amazon CloudFront, et plus encore. Récemment, l’entreprise a lancé Bottlerocket, un système d'exploitation basé sur Linux et écrit en Rust. L’équipe Amazon EC2 utilise le langage Rust pour développer les nouveaux composants du système Nitro d'AWS, y compris les applications sensibles, telles que les enclaves Nitro. Pour Shane Mille, en tant que membre fondateur de la Fondation Rust, l’entreprise se consacrera à l’un des objectifs de la fondation Rust qui consiste à donner aux responsables de Rust les moyens de faire joyeusement leur travail.

    Pourquoi ne pas utiliser Rust ?

    Longtemps, le langage de prédilection pour la création d'applications critiques en termes de performances, le C++ souffre d'un certain nombre de problèmes qui gênent les développeurs modernes, a expliqué Carruth. Il a accumulé des décennies de dettes techniques, entraînant avec lui de nombreuses pratiques dépassées qui faisaient partie du prédécesseur du langage, le C. Les gardiens du C++ donnent la priorité à la rétrocompatibilité, afin de continuer à soutenir des projets largement utilisés tels que Linux et son écosystème de gestion des paquets, explique Carruth.

    L'évolution du langage est également entravée par un processus de comité bureaucratique, orienté vers la normalisation plutôt que la conception. Ce qui peut rendre difficile l'ajout de nouvelles fonctionnalités. Le C++ a largement un processus de développement séquestré, dans lequel un comité restreint prend les décisions importantes, dans un processus en cascade qui peut prendre des années.

    La comparaison entre Rust et C++ reste un sujet d'actualité, car ces langages de programmation sont en concurrence dans des domaines comme le développement système et l'embarqué. Du point de vue technique, les deux langages partagent de nombreuses similitudes dans leur syntaxe. Cependant, Rust et C++ présentent des différences significatives.

    C++ est un langage de programmation compilé permettant la programmation sous de multiples paradigmes, dont la programmation procédurale, la programmation orientée objet et la programmation générique. Ses bonnes performances, et sa compatibilité avec le C en font un des langages de programmation les plus utilisés dans les applications où la performance est critique.

    En outre, c'est un langage polyvalent, ce qui signifie qu'il peut être utilisé dans presque tous les cas. Cependant, en raison de ses règles syntaxiques complexes et de son utilisation globalement difficile, il est principalement dominant dans les applications qui nécessitent une grande vitesse, la simultanéité et un examen plus approfondi du fonctionnement du matériel.

    Toutefois, la sécurité de la mémoire est une autre fonctionnalité indispensable qui fait défaut au C++. Les bogues d'accès à la mémoire sont l'une des principales causes d'exploitation de la sécurité. Les concepteurs de Carbon chercheront des moyens de mieux suivre les états non initialisés, de concevoir des API et des idiomes qui prennent en charge les vérifications dynamiques des limites et de créer un mode de construction de débogage par défaut complet.

    Pour certains analystes, le C++ possède des bases plus solides en ce qui concerne la communauté et les informations générales sur ses principes. En outre, par rapport au C++, Rust est un nouveau venu dans le monde de la programmation, et de nombreux développeurs hésitent à s'y intéresser.

    La fin du C++ ?

    De même que Microsoft a créé Typescript pour mettre à jour JavaScript et que Kotlin a été créé pour pallier les faiblesses de Java, Carbon pourrait servir de langage successeur à C++, un langage qui offre aux développeurs un point de départ facile vers un langage plus récent qui prend en compte les concepts de développement modernes tels que la sécurité de la mémoire et les génériques.

    « La structure du comité est conçue pour assurer la représentation des nations et des entreprises, plutôt que de construire une équipe et une communauté inclusive et accueillante d'experts et de personnes contribuant activement au langage », écrit Carruth. « L'accès au comité et à la norme est restreint et coûteux, la présence est nécessaire pour avoir une voix, et les décisions sont prises par des votes des personnes présentes. »


    Carruth veut construire Carbon par un environnement plus ouvert et dirigé par la communauté. Le projet sera maintenu sur GitHub, et discuté sur Discord. Bien que Carbon ait commencé comme un projet interne de Google, l'équipe de développement souhaite réduire les contributions de Google, ou de toute autre entreprise, à moins de 50 % d'ici la fin de l'année. Elle souhaite finalement confier le projet à une fondation logicielle indépendante, où son développement sera dirigé par des bénévoles.

    Dans sa présentation à CPP North, Carruth a conseillé à ceux qui utilisent Rust de continuer à l'utiliser. Carbon est destiné aux développeurs qui disposent déjà de bases de code importantes en C++, difficiles à convertir en Rust. Carbon est spécifiquement ce que Carruth appelle un « langage successeur », qui est construit au-dessus d'un écosystème déjà existant, C++ dans ce cas.

    « Il est conçu autour de l'interopérabilité avec C++ ainsi que de l'adoption et de la migration à grande échelle pour les bases de code et les développeurs C++ existants », expliquent les concepteurs. Cela signifie que le langage doit être aussi performant que C++, qu'il doit offrir une interopérabilité transparente et bidirectionnelle avec C++.

    Source : Google

    Et vous ?

    Quel est votre avis sur le sujet ?

    Google essaie-t-il de tuer le C++ ?

    Pourquoi Carbon plutôt que le Rust pour améliorer les problèmes de sécurité et de mémoire en C++ ?

    Selon vous, la fin du C++ est-elle envisageable ?

    Voir aussi :

    Microsoft, Google, AWS, Huawei et Mozilla s'associent pour créer la Fondation Rust, une organisation à but non lucratif chargée de gérer le langage de programmation

    Le projet Carbon, un successeur expérimental du C++, explore une direction future possible pour le C++ étant donné les difficultés à l'améliorer et mise sur l'interopérabilité comme base de travail

    C3 : un langage de programmation système basé sur le C, permet un accès sécurisé aux tableaux, les conteneurs de haut niveau et manipulation des chaînes de caractères
    Contribuez au club : corrections, suggestions, critiques, ... Contactez le service news et Rédigez des actualités

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    952
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 952
    Par défaut
    Ma pensée sur le sujet :

    https://xkcd.com/927/

  3. #3
    Inactif  
    Profil pro
    undef
    Inscrit en
    Février 2013
    Messages
    1 001
    Détails du profil
    Informations personnelles :
    Localisation : France, Lot (Midi Pyrénées)

    Informations professionnelles :
    Activité : undef

    Informations forums :
    Inscription : Février 2013
    Messages : 1 001
    Par défaut
    Ça à l'air d'être un beau baratin commercial affirmant tout et son contraire.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Rust est un substitut au C et pas vraiment au C++. Par ailleurs, le gros intérêt du C++ est son support natif du C. De fait, je ne vois pas bien l'intérêt d'un nouveau langage objet qui ne serait pas compatible avec Rust.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Décembre 2021
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2021
    Messages : 3
    Par défaut
    Kotlin à vraiement remplacer Java ?

  6. #6
    Membre éprouvé
    Homme Profil pro
    Développeur
    Inscrit en
    Août 2003
    Messages
    1 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Août 2003
    Messages : 1 501
    Par défaut
    Citation Envoyé par progz_du_dimanche Voir le message
    Kotlin à vraiement remplacer Java ?
    Sur Android en partie
    En Web, je dirais que c'est plutôt Go

    Mais JAVA est encore énormément utilisé

    Il aurait peut été été plus judicieux d'enrichir RUST (langage, bibliothèques, documentation, best practices, exemples) plutôt que de créer un autre langage

  7. #7
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2008
    Messages
    26 772
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2008
    Messages : 26 772
    Par défaut
    Citation Envoyé par smarties Voir le message
    Il aurait peut été été plus judicieux d'enrichir RUST (langage, bibliothèques, documentation, best practices, exemples) plutôt que de créer un autre langage
    Cette option a aussi été étudiée (et continue à l'être, vu que Google s'investit de plus en plus dans Rust : https://opensource.googleblog.com/20...oundation.html, par exemple). D'ailleurs, ils déconseillent Carbon si tu peux utiliser Rust : https://github.com/carbon-language/c...d#why-not-rust. Vu que Carbon est expérimental, il fera peut-être long feu et sera abandonné au profit de Rust.
    Vous souhaitez participer aux rubriques Qt (tutoriels, FAQ, traductions) ou HPC ? Contactez-moi par MP.

    Créer des applications graphiques en Python avec PyQt5
    Créer des applications avec Qt 5.

    Pas de question d'ordre technique par MP !

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    178
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Février 2008
    Messages : 178
    Par défaut
    Je ne comprend pas cette obstination à vouloir remplacer le C/C++ par un autre langage.

    Je ne comprend pas l’intérêt de trop modifier la philosophie des langages d'ailleurs (ex du .net avec les référence non-nullable ).

    J'ai l'impression que c'est une fuite en avant ,et qu'il faut innover pour innover.

    ça me rappel les requins, qui continuent à nager en dormant, sinon il s’étouffent.

  9. #9
    Membre éprouvé
    Homme Profil pro
    Développeur
    Inscrit en
    Août 2003
    Messages
    1 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Août 2003
    Messages : 1 501
    Par défaut
    Citation Envoyé par jpouly Voir le message
    Je ne comprend pas cette obstination à vouloir remplacer le C/C++ par un autre langage.
    Pour avoir fait un peu de C et de C++ il y a eu des problèmes très agaçants :
    - les bibliothèques non portées sur différents OS et une compilation pas toujours facile, sur RUST c'est beaucoup moins le cas
    - une syntaxe pas toujours lisible, avec RUST il faut plutôt comprendre certains concepts
    - des fuites mémoires pas toujours facile à trouver
    - un manque d'industrialisation, quand je vois Cargo et la facilité d'écrire des tests unitaires en RUST, je me demande si les autres langages ont pensé à mettre ça dans leur feuille de route (OK pour les dépendances, JAVA a Maven, Go a quelque chose de similaire, Python a pip, ...)

    PS : je suis développeur python

  10. #10
    Membre extrêmement actif
    Avatar de Madmac
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2004
    Messages
    1 712
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Alimentation

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 712
    Billets dans le blog
    7
    Par défaut
    Citation Envoyé par jpouly Voir le message
    Je ne comprend pas cette obstination à vouloir remplacer le C/C++ par un autre langage.

    J'ai l'impression que c'est une fuite en avant ,et qu'il faut innover pour innover.

    Parce que C++, ressemble de plus en plus à un amalgame de langage, qu'à un seul langage. Et c'est devenu plus qu'évident avec les templates.

    Moi ce qui me dérange le plus est qu'ils me semble pas avoir une idée très clair de la direction de l'évolution. Plutôt que de tenter de modifier le language, il devrait développer un surchose pour rendre le langage plus accessible et moins sujet aux fuites. J'ai jamais compris la raison pour laquelle, personne n'a développer une librairie pour faire du pure objet en C++. En pratique, la programmation avec de tel outil ne représenterait un niveau de difficulté plus élévé que de programmer en Python ou Ruby.

  11. #11
    Membre actif
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2005
    Messages : 42
    Par défaut
    Pourquoi pas s'investir dans un trans compilateur C++ vers Rust, plutôt que d'un ème langage.

  12. #12
    Membre averti Avatar de selmanjo
    Homme Profil pro
    Savant en programmation orienté objet
    Inscrit en
    Janvier 2020
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Savant en programmation orienté objet
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2020
    Messages : 83
    Par défaut
    Le C/C++ toujours difficile à compiler, je préfère et suggère qu'on mette en place un excellent gestionnaire de dépendances pour que nos programmes puissent compiler à tous moments.

    Car Carbon, n'est pas encore bon. Les langages ultra modernes et nouveaux se ressemblent de plus en plus syntaxiquement, surtout venant de Google.
    Le mieux est d'enrichir Rust, et Carbon suivra.

  13. #13
    Membre très actif
    Homme Profil pro
    retraité
    Inscrit en
    Septembre 2014
    Messages
    643
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Septembre 2014
    Messages : 643
    Par défaut
    Si je connais plusieurs langages de programmation, C et surtout C++ me sont étrangers à 99%. Mais en comparant les deux exemples, j'ai trouvé Carbon bien plus lisible que C++, et j'ai compris le code que fait le premier, pour le C++, non pas tout.

  14. #14
    Membre éprouvé
    Profil pro
    programmeur du dimanche
    Inscrit en
    Novembre 2003
    Messages
    997
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : programmeur du dimanche
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2003
    Messages : 997
    Par défaut
    Citation Envoyé par TotoParis Voir le message
    Si je connais plusieurs langages de programmation, C et surtout C++ me sont étrangers à 99%. Mais en comparant les deux exemples, j'ai trouvé Carbon bien plus lisible que C++, et j'ai compris le code que fait le premier, pour le C++, non pas tout.
    Honnêtement, il y a pas grand chose de fondamentalement révolutionnaire entre les deux sources, sauf la volonté de remplacer les #include par un gestionnaire de dépendance.

    Le reste, c'est surtout du sucre syntaxique et étrangement des régressions. La syntaxe du c++ est tordue, mais on s'y fait (à reculons pour moi...)

    Le +
    • std:: c'est la gestion des namespace un peu lourde où les fonctions standards ont un namespace dédié, alors que carbon les met dans l'espace de nommage courant.
    • span<circle> c'est un template, la façon de gérer la généricité... alors que carbon semble utiliser une fonction du langage à la place.
    • cout << : les créateurs du c++ on trouvé que c'était génial de surcharger << l'opérateur de décalage de bit, dans la fonction d'affichage cout, au lieu d'utiliser la notation fonction habituelle...

    Le -
    • auto a disparu (typage automatique). Bon, ensuite auto résout un problème très c++ d'avoir des types longs à saisir...
    • quand carbon initialise son tableau de Circle, il faut préciser .r=valeur à chaque fois, alors même que .r est la seule variable en argument... c'est une étrangeté que je n'ai vue dans aucun autre langage.

  15. #15
    Membre averti Avatar de selmanjo
    Homme Profil pro
    Savant en programmation orienté objet
    Inscrit en
    Janvier 2020
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Savant en programmation orienté objet
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2020
    Messages : 83
    Par défaut Rust
    En ce moment Rust n'est pas encore enseigné dans mon école supérieur !
    Je me demande si mon école, en ce moment, en parlant de Rust, le verrouille.
    La syntaxe Rustique ne me parait pas facile à appréhender, mais il y a des
    efforts à fournir pour bien maîtriser ce magnifique langage de programmation.

    Bien que je ne fais que débuter dessus !

    Maintenant, dans le contexte du changement climatique , Carbon ne me semble
    pas être une bonne alternative.

  16. #16
    Chroniqueur Actualités
    Avatar de Patrick Ruiz
    Homme Profil pro
    Redacteur web
    Inscrit en
    Février 2017
    Messages
    2 265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Redacteur web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Février 2017
    Messages : 2 265
    Par défaut Carbon va-t-il remplacer le C++ ? Le projet Carbon explore une direction future possible pour le C++
    Carbon va-t-il remplacer le C++ ? Le projet Carbon explore une direction future possible pour le C++ étant donné les difficultés à l’améliorer
    Et mise sur l’interopérabilité comme base de travail

    Le langage Carbon est encore expérimental. La feuille de route indique la période 2025-2026 pour la sortie de la version 0.2 qui marquera le terme de l’expérience. La version 1.0 est attendue après 2026. L’effort est porté par des ingénieurs logiciels de Google qui ont cessé de participer à la normalisation du C++, ont démissionné de leur rôle officiel au sein du comité. Motif : un vote (au sein du comité de normalisation) sur la question de la rupture de la compatibilité ABI en faveur de la performance ne leur a pas donné raison. C’est de cette mésentente que naît le projet Carbon annoncé comme successeur du C++.

    Les développeurs de Carbon expliquent que certes, le C++ est le langage dominant pour les logiciels à performances critiques, mais son héritage et sa dette technique signifient que son amélioration incrémentale est une tâche très ardue.

    Carbon est un nouveau langage qui vise à égaler les performances de C++ et à maintenir une interopérabilité bidirectionnelle transparente, ainsi qu'une courbe d'apprentissage douce pour les développeurs C++.

    L'équipe promet en sus un certain niveau de traduction de source à source pour le code C++. Le projet présente des parallèles avec TypeScript pour les développeurs JavaScript, ou Kotlin pour les développeurs Java, bien que la comparaison ne soit pas exacte. Carbon est conçu pour être interopérable avec le code C++ et pour faciliter la migration. La chaîne d'outils Carbon prendra en charge la compilation du code C++.

    Pourquoi le C++ est-il difficile à améliorer ? Parce que le langage lui-même a commencé comme une bifurcation du C. Selon l'équipe Carbon, les concepteurs du C++ ont ajouté plutôt que remplacé des fonctionnalités du langage au fil du temps, créant ainsi des interactions complexes entre les fonctionnalités. La préservation de la compatibilité binaire est un autre problème hérité. En outre, le comité C++ et le processus d'évolution sont orientés vers la normalisation plutôt que la conception, sont lents et ne parviennent pas toujours à prendre des décisions.

    Carbon s'efforce de contourner ces problèmes en adoptant une nouvelle approche fondée sur les principes de l'open source. « Nous tenterons même de combler une énorme lacune dans l'écosystème C++ avec un gestionnaire de paquets intégré », peut-on lire dans les documents.

    Le langage Carbon sera familier aux développeurs C++ et C, mais il y a aussi de nombreuses différences. Les fonctions sont déclarées avec le mot clé "fn" et les variables avec "var". Il existe également des tuples fortement typés. L'inférence de type est supportée par le mot clé "auto". Les pointeurs sont pris en charge, mais pas l'arithmétique des pointeurs ; les seules opérations sur les pointeurs sont l'adressage et le déréférencement. Les classes supportent l'héritage simple, mais pas l'héritage multiple.
    La sécurité de la mémoire est une considération importante, mais n'est pas l'objectif initial. « La différence entre l'approche de Rust et celle de Carbon est que Rust commence par la sécurité et que Carbon commence par la migration », peut-on lire dans la documentation. L'approche consiste à simplifier le langage afin de créer de l'espace pour les fonctionnalités de sécurité, puis à refaire l'ingénierie des fondations pour modéliser et appliquer la sécurité.


    Les développements autour du langage Carbon interviennent dans où Rust se démarque des autres langages présentés depuis des années comme des alternatives au C et au C++. En effet, le noyau Linux s’ouvre de plus en plus au langage de programmation système de Mozilla.

    Après 31 ans, un deuxième langage fait son entrée pour le développement du noyau Linux : c’est le Rust. La prise en charge de Rust pour le développement du noyau Linux est vue comme une « une étape importante vers la capacité d'écrire les pilotes dans un langage plus sûr. » Rust de Mozilla Research est le type de langage de programmation auquel ceux qui écrivent du code pour des systèmes d’entrée/sortie de base (BIOS), des chargeurs d’amorce, des systèmes d’exploitation, etc. portent un intérêt. D’avis d’observateurs avertis, c’est le futur de la programmation système en lieu et place de langages comme le C ou le C++.

    Source : Semaphore

    Et vous ?

    Êtes-vous en accord avec l’argumentaire (le langage C++ est difficile à faire évoluer) qui a mené au lancement du projet Carbon ?
    Êtes-vous développeur C++ ? Quelle plus-value reconnaissez-vous à ce projet ? Sinon qu’en attendez-vous ?
    Le projet Carbon vient-il avec une plus-value véritable en comparaison à un langage comme le Rust considéré le futur pour ce qui est du développement d’applications système ?

    Voir aussi :

    L'équipe Microsoft Security Response Center recommande l'utilisation de Rust comme approche proactive pour un code plus sécurisé
    Quel langage pourrait remplacer C ? Après avoir comparé Go, Rust et D, le choix d'Andrei Alexandrescu se porte sur D
    C2Rust : un outil qui permet de faire la traduction et la refactorisation de votre code écrit en langage C vers le langage Rust
    Contribuez au club : Corrections, suggestions, critiques, ... : Contactez le service news et Rédigez des actualités

  17. #17
    Membre émérite
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 354
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 354
    Par défaut cppfront
    j'ai l'impression, après avoir essayé un peu, que cppfront serait mieux pour migrer du source c++ vers un sous ensemble plus sain.

    De plus, il n'y a rien de fonctionnel dans Carbon, ils sont juste dans le design.

  18. #18
    Membre confirmé
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Mai 2015
    Messages
    377
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Mai 2015
    Messages : 377
    Par défaut Bonjour


    Citation Envoyé par selmanjo Voir le message
    En ce moment Rust n'est pas encore enseigné dans mon école supérieur !
    Si on veut maîtriser un langage, quelqu'il soit, il ne suffit pas de l'apprendre, mais le comprendre. Et la compréhension passe par la pratique, et cela demande du temps. A là sortie de n'importe qu'elle école, tu connais un peu de théorie, la syntaxe d'un où de quelques langages, mais tant que tu n'as pas "mis les mains" dans le cambouis, tu ne seras pas un bon développeur, tant que tu n'as pas été confronté à la réalité.

    Citation Envoyé par selmanjo Voir le message
    Je me demande si mon école, en ce moment, en parlant de Rust, le verrouille. La syntaxe Rustique ne me parait pas facile à appréhender, mais il y a des efforts à fournir pour bien maîtriser ce magnifique langage de programmation. Bien que je ne fais que débuter dessus !
    Ce n'est pas propre à l'informatique, mais tout change très vite aujourd'hui. Et un prof, c'est un être humain comme un autre. Pour qu'il puisse t'apprendre Rust, il faut d'abord que lui le comprenne, ce qui demande du temps, et l'envie. Les concepts propre à un langage, la bonne manière d'utiliser un langage, ça ne se fait pas via une formation de 15j. Il faut des années pour devenir un bon Développeur.

    BàT et Peace & Love.

  19. #19
    Chroniqueur Actualités

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mars 2013
    Messages
    9 584
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Mars 2013
    Messages : 9 584
    Par défaut Les innovations de C++26 : comment les dernières améliorations vont transformer le développement en C++
    Les innovations de C++26 : comment les dernières améliorations vont transformer le développement en C++,
    dans un contexte où plusieurs entités recommandent de remplacer C++ par des alternatives

    Le langage de programmation C++ continue d'évoluer avec l'introduction de nouvelles fonctionnalités et améliorations. La version C++26, bien que toujours en cours de développement, apporte déjà plusieurs nouveautés : spécifier une raison pour la suppression d'une fonction, variables de remplacement sans nom, déclaration d'une liaison structurée en tant que condition. Mais certains encouragent plutôt le passage à Rust ou Carbon, pourquoi ?

    Spécifier une raison pour la suppression d'une fonction

    Depuis le C++11, il est possible de déclarer une fonction comme supprimée, afin que le compilateur empêche son utilisation. Cela peut être utilisé pour empêcher l'utilisation de fonctions membres spéciales d'une classe, mais aussi pour supprimer toute autre fonction.

    Introduits en C++11, = default et = delete ont rejoint = 0 en tant que spécification alternative possible pour le corps d'une fonction, au lieu d'un corps d'instructions ordinaire entouré d'accolades. La motivation initiale de la déclaration de fonction supprimée via = delete est de remplacer (et d'annuler) la pratique courante de l'ère C++98/03 consistant à déclarer les fonctions membres spéciales comme privées et à ne pas les définir afin de désactiver leur génération automatique. Cependant, l'ajout de = delete a acquis un pouvoir encore plus grand, car il peut être utilisé pour n'importe quelle fonction, et pas seulement pour les membres spéciaux.

    Aujourd'hui, dix ans après l'introduction des fonctions supprimées, nous pouvons conclure en toute confiance que = delete est devenu l'une des fonctionnalités clés de C++11 qui a grandement amélioré l'expérience des utilisateurs en cas d'erreurs dans l'utilisation des fonctions de la bibliothèque et a été une réussite de la révolution du « C++ moderne ».

    Il y a plusieurs raisons pour lesquelles les fonctions supprimées ont été préféré aux fonctions traditionnelles privées mais non définies, notamment une meilleure sémantique (friend et les autres membres sont toujours inaccessibles, ce qui transforme une erreur de l'éditeur de liens en une erreur à la compilation), de meilleurs diagnostics (au lieu d'erreurs cryptiques « fonction inaccessible », l'utilisateur sait directement que la fonction est supprimée) et une plus grande puissance (pas seulement pour les SMF).

    Au lieu d'une erreur déjà plus conviviale mais toujours un peu énigmatique « calling deleted function », les éditeurs veulent permettre directement aux auteurs de bibliothèques de présenter un message supplémentaire facultatif qui devrait être inclus dans le message d'erreur, de sorte que l'utilisateur connaisse le raisonnement exact de la raison pour laquelle la fonction est supprimée, et dans certains cas, vers quel remplacement l'utilisateur devrait se diriger à la place.

    Une fonction peut être supprimée comme suit (exemple tiré du document de proposition) :

    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    class NonCopyable
    {
    public:
        // ...
        NonCopyable() = default;
        // les membres de la copie
        NonCopyable(const NonCopyable&) = delete;
        NonCopyable& operator=(const NonCopyable&) = delete;
     
    };

    En C++26, vous pouvez spécifier la raison pour laquelle cette fonction est supprimée :

    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    class NonCopyable {
    public:
        NonCopyable() = default;
        NonCopyable(const NonCopyable&) = delete("Cette classe gère des ressources uniques, la copie n'est pas supportée; utilisez le déplacement à la place.");
        NonCopyable& operator=(const NonCopyable&) = delete("Cette classe gère des ressources uniques, la copie n'est pas supportée; utilisez le déplacement à la place.");
    };


    Variables de remplacement sans nom

    Il existe des cas où une variable doit être déclarée sans que son nom soit utilisé, comme dans les liaisons de structure ou les verrous (lock_guard). C++26 introduit la possibilité d’utiliser un seul trait de soulignement (_) pour définir une variable sans nom.

    Par exemple, dans l'exemple suivant, unused est une variable qui n'est pas utilisée :

    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    [[maybe_unused]] auto [data, unused] = get_data();

    En C++26, la variable unused peut être nommée _ (simple trait de soulignement) :

    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    auto [data, _] = get_data();

    Lorsque l'identificateur de soulignement unique est utilisé pour la déclaration d'une variable, d'une variable membre de classe non statique, d'une capture lambda ou d'une liaison de structure, l'attribut [[maybe_unused]] est implicitement ajouté, il n'est donc pas nécessaire de l'utiliser explicitement.

    Une déclaration portant le nom _ est dite indépendante du nom si elle déclare :
    • une variable avec une durée de stockage automatique
    • une liaison de structure, mais pas dans un espace de noms
    • une variable introduite par une capture init
    • un membre de données non statique

    Le compilateur n'émet pas d'avertissement quant à l'utilisation ou non d'une déclaration indépendante du nom. De plus, plusieurs déclarations indépendantes du nom peuvent être utilisées dans la même portée (qui n'est pas une portée d'espace de noms) :

    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    int main()
    {
      int _;
      _ = 0;         // OK
      std::string _; // OK, parce que _ est une déclaration indépendante du nom
      _ = "0";       // Erreur : référence ambiguë au caractère générique « _ », qui est défini plusieurs fois.
    }

    En revanche, ce qui suit n'est pas possible :

    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    int main()
    {
      int _;
      _ = 0;                // OK
      static std::string _; // Erreur : les variables statiques ne sont pas indépendantes du nom
    }

    L'opération suivante n'est pas non plus possible, car les déclarations se trouvent dans un espace de noms :

    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    namespace n
    {
      int f() {return 42;}
      auto _ = f(); // OK
      auto _ = f(); // Erreur : redéfinition de _
    }


    Déclaration d'une liaison structurée en tant que condition

    Une liaison de structure définit un ensemble de variables liées à des sous-objets ou à des éléments de leur initialisateur.

    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    auto [position, length] = get_next_token(text, offset);

    Une liaison de structure peut apparaître dans une déclaration for-range, comme dans l'exemple suivant :

    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for (auto [position, length] : tokenize(text, offset))
    {
      std::println("pos {}, len {}", position, length);
    }

    En revanche, les variables peuvent apparaître dans la condition d'une instruction if, while ou for :

    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if (auto it = std::find_if(begin(arr), end(arr), is_even); it != std::end(arr))
    {
      std::println("{} est le premier nombre pair", *it);
    }

    Cependant, les liaisons de structure ne peuvent pas être déclarées dans la condition d'une instruction if, while ou for. Cela change en C++26, ce qui rend la chose possible :

    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if(auto [position, length] = get_next_token(text, offset); position >= 0)
    {
      std::println("pos {}, len {}", position, length);
    }

    Un cas intéressant et très utile est présenté dans le document de proposition (P0963). Considérons l'exemple C++26 suivant pour l'utilisation de std::to_chars :

    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    if (auto result = std::to_chars(p, last, 42))
    {
    ​​​​    auto [ptr, _] = result;
    ​​​​    // ok pour continuer
    ​​​​} 
    else 
    {
    ​​​​    auto [ptr, ec] = result;
    ​​​​    // gestion des erreurs
    ​​​​}

    Lorsque la fonction réussit, seul le membre ptr de std::to_chars_result nous intéresse, car il contient un pointeur sur le pointeur de fin de ligne des caractères écrits. Si la fonction échoue, nous devons également examiner le membre ec (du type std::errc) qui représente un code d'erreur.

    Ce code peut être simplifié avec des liaisons de structure, en C++26, comme suit :

    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    ​​​​if (auto [ptr, ec] = std::to_chars(p, last, 42))
    {
    ​​​​    // ok pour continuer
    ​​​​} 
    else 
    {
    ​​​​    // gestion des erreurs
    ​​​​}

    Nom : simple.png
Affichages : 101390
Taille : 9,9 Ko

    Le projet Carbon, un successeur expérimental du C++, explore une direction future possible pour le C++ étant donné les difficultés à l'améliorer

    En février 2020, un vote crucial a eu lieu au sein du comité de normalisation du C++ sur la rupture de la compatibilité ABI en faveur de la performance. L’initiative principalement poussée par les employés de Google a échoué. Résultat : de nombreux Googlers ont cessé de participer à la normalisation du C++, ont démissionné de leur rôle officiel au sein du comité, et le développement de clang a considérablement ralenti. C’est de cette rupture que naît le projet Carbon annoncé comme successeur du C++. L’objectif : explorer une direction future possible pour le C++ étant donné les difficultés à l’améliorer. Le projet Carbon mise sur l’interopérabilité avec le C++ comme base de travail.

    Les développeurs de Carbon expliquent que certes, le C++ est le langage dominant pour les logiciels à performances critiques, mais son héritage et sa dette technique signifient que son amélioration incrémentale est une tâche très ardue. Carbon est un nouveau langage qui vise à égaler les performances de C++ et à maintenir une interopérabilité bidirectionnelle transparente, ainsi qu'une courbe d'apprentissage douce pour les développeurs C++.

    L'équipe promet en sus un certain niveau de traduction de source à source pour le code C++. Le projet présente des parallèles avec TypeScript pour les développeurs JavaScript, ou Kotlin pour les développeurs Java, bien que la comparaison ne soit pas exacte. Carbon est conçu pour être interopérable avec le code C++ et pour faciliter la migration. La chaîne d'outils Carbon prendra en charge la compilation du code C++.

    Pourquoi le C++ est-il difficile à améliorer ? Parce que le langage lui-même a commencé comme une bifurcation du C. Selon l'équipe Carbon, les concepteurs du C++ ont ajouté plutôt que remplacé des fonctionnalités du langage au fil du temps, créant ainsi des interactions complexes entre les fonctionnalités. La préservation de la compatibilité binaire est un autre problème hérité. En outre, le comité C++ et le processus d'évolution sont orientés vers la normalisation plutôt que la conception, sont lents et ne parviennent pas toujours à prendre des décisions.

    Carbon s'efforce de contourner ces problèmes en adoptant une nouvelle approche fondée sur les principes de l'open source. « Nous tenterons même de combler une énorme lacune dans l'écosystème C++ avec un gestionnaire de paquets intégré », peut-on lire dans les documents.


    La Maison Blanche invite les développeurs à abandonner le C et le C++ pour passer à des langages comme le Rust

    Faut-il arrêter d’initier de nouveaux projets en C ou C++ et passer à Rust ? La question divise dans la communauté des développeurs dont certains recommandent le langage Rust plutôt que le C ou le C++. Les raisons : la parité du Rust en termes de vitesse d’exécution en comparaison avec le C ; la sécurisation et la fiabilité du Rust en comparaison avec C ou C++. La comparaison entre Rust et C++ vient de prendre un coup de neuf avec un rapport de la Maison Blanche sur la sécurisation de la mémoire qui invite les développeurs à abandonner C ou C++ pour passer à des langages comme le Rust jugés supérieurs pour sécuriser les espaces mémoire des logiciels. C’est une sortie qui fait suite à la prise de position du créateur du langage C++ selon laquelle : « la sécurisation des logiciels par le Rust n’est pas supérieure à celle offerte par le C++. »

    Sources : OpenSTD (1, 2, 3), Carbon

    Et vous ?

    Quelle est votre fonctionnalité préférée parmi celles introduites dans C++26 et pourquoi ?
    Comment pensez-vous que la possibilité de spécifier une raison pour la suppression d’une fonction pourrait améliorer le développement en C++ ?
    Avez-vous déjà rencontré des situations où les variables de remplacement sans nom seraient particulièrement utiles ? Pouvez-vous partager un exemple ?
    Pensez-vous que ces nouvelles fonctionnalités de C++26 vont simplifier ou compliquer le processus de développement ? Pourquoi ?
    Quels autres aspects du langage C++ aimeriez-vous voir améliorés dans les futures versions ?
    Comment ces nouveautés de C++26 se comparent-elles aux améliorations récentes d’autres langages de programmation que vous utilisez ?
    Voyez-vous des défis potentiels à l’adoption de ces nouvelles fonctionnalités dans des projets existants ? Si oui, lesquels ?
    Comment ces améliorations pourraient-elles influencer votre approche de la programmation en C++ ?
    Que pensez-vous des projets comme Carbon ou des propositions comme celle de la Maison Blanche visant à se délester du C++ ?

    Voir aussi :

    Google affirme qu'il est non seulement possible, mais aussi relativement facile de remplacer C++ par Rust dans les firmwares. L'entreprise explique en quoi ce changement est avantageux
    « Les équipes Rust chez Google sont deux fois plus productives que celles qui se servent de C++ », d'après un responsable de l'entreprise qui lance le débat de la productivité entre Rust et C++
    Contribuez au club : Corrections, suggestions, critiques, ... : Contactez le service news et Rédigez des actualités

  20. #20
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2019
    Messages
    310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2019
    Messages : 310
    Par défaut
    il faudrait surtout "nettoyer" les fonctions existantes, peu utilisées/utilisables, mais ils ne peuvent s'empêcher de rajouter de nouvelles variantes de fonctions existantes. Je me demande qui les utilisent réellement. Par exemple, il existe maintenant 14 variantes de la fonction replace de std::basic_string !!
    Et pourtant, on n'a toujours pas une fonction simple pour remplacer une ou plusieurs occurrences d'une sous-chaîne par une autre (case sensitive/insenstive) dans une chaîne. On n'a toujours pas accès non plus à des fonctions de trim. Pour chaque nouveau poste en entreprise, chaque projet utilise soit boost ou a sa propre librairie pour manipuler les string !
    Pendant ce temps, le comité c++ invente des nouveaux concepts ou des nouvelles variantes de fonctions que je n'ai personnellement jamais croisées dans aucun projet. J'ai pourtant plus de 20 ans d'expérience !

Discussions similaires

  1. Réponses: 0
    Dernier message: 29/11/2011, 09h20
  2. Création d'une base de données pour gérer des projets
    Par Rodrigue dans le forum Modélisation
    Réponses: 4
    Dernier message: 19/11/2010, 17h14
  3. Réponses: 2
    Dernier message: 11/04/2010, 11h53
  4. Besoin de directions de recherches pour mon projet.
    Par RudyWI dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 19/12/2007, 12h19
  5. Réponses: 4
    Dernier message: 14/03/2007, 08h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo