2 pièce(s) jointe(s)
Vers un C++ plus sûr ? La communauté C++ contre-attaque avec les extensions Safe C++
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
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.
Lors d'un récent évènement dédié au langage C++ cette semaine à Toronto, Chandler Caruth, ingénieur logiciel chez Google, a présenté le langage Carbon, décrit comme un successeur expérimental du C++, suscitant un vif intérêt au sein de la communauté C++.
« Nous comprenons l'intérêt de la communauté pour cette keynote. Nous publierons l'enregistrement selon un calendrier accéléré », ont déclaré les organisateurs de la conférence sur Twitter. Carruth est responsable technique des principaux langages de programmation et de l'évolution des langages de Google. Il représente Google au sein du comité des normes C++ et contribue à LLVM et Clang.
Les développeurs de Carbon expliquent que si le C++ est le langage dominant pour les logiciels à performances critiques, son héritage et sa dette technique signifient que l'amélioration incrémentale du C++ est extrêmement difficile.
Une solution consiste à migrer vers d'autres langages tels que Rust, Kotlin, Swift ou Go, mais il est difficile de migrer vers ces derniers à partir du C++. De plus, dans certains cas, ces derniers présentent une surcharge de performance. 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. Le langage C a 50 ans, il n'est donc pas surprenant qu'il y ait beaucoup d'héritage. 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 feuille de route actuelle vise à terminer la version 0.1 du langage cette année, la 0.2 en 2023 et la version 1.0 en 2024 ou 2025.
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é.
Le projet est sous licence Apache 2 avec des exceptions LLVM. L'équipe prévoit de créer une fondation open source et de lui transférer tous les droits liés à Carbon. « Notre objectif est que la configuration de la fondation soit similaire à d'autres projets open source tels que LLVM ou Kubernetes », ajoute-t-elle. Cependant, le projet exige actuellement que les contributeurs acceptent le CLA (contributor license agreement) de Google, ce qui peut poser problème à certains. Google finance également l'infrastructure de Carbon.
Sur la question de savoir pourquoi ne pas utiliser d’autres langages comme Rust, les têtes derrière l’initiative répondent : « Si vous voulez utiliser Rust, et que c'est techniquement et économiquement viable pour votre projet, vous devriez utiliser Rust ». Toutefois, la question de Rust est au cœur de la réussite future du projet Carbon. En effet, Rust est de l’avis de plusieurs observateurs en passe de devenir le langage de bas niveau standard. Néanmoins, on continue de compter plus de lancements de projets pilotés en C++ qu’en Rust et donc toute possibilité d’aller au-delà du C++ tout en conservant l’interopérabilité doit faire office de bonne nouvelle.
Source : Carbon
Et vous ?
:fleche: Êtes-vous en accord avec l’argumentaire (le langage C++ est difficile à faire évoluer) qui a mené au lancement du projet Carbon ?
:fleche: Êtes-vous développeur C++ ? Quelle plus-value reconnaissez-vous à ce projet ? Sinon qu’en attendez-vous ?
:fleche: 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 :
:fleche: Programmation : une étude révèle les langages les plus voraces en énergie, Perl, Python et Ruby en tête, C, Rust et C++, les langages les plus verts
:fleche: Linus Torvalds souligne une bonne avancée du langage Rust dans le développement du noyau Linux, et aurait qualifié le C++ de « langage de m... », après le message de Google
:fleche: 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
:fleche: Facebook rejoint AWS, Huawei, Google, Microsoft et Mozilla dans la Fondation Rust, et renforce son équipe Rust par des nouveaux talents
2 pièce(s) jointe(s)
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++ :
Voici la même fonction écrite en carbone :
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 ?
:fleche: Quel est votre avis sur le sujet ?
:fleche: Google essaie-t-il de tuer le C++ ?
:fleche: Pourquoi Carbon plutôt que le Rust pour améliorer les problèmes de sécurité et de mémoire en C++ ?
:fleche: Selon vous, la fin du C++ est-elle envisageable ?
Voir aussi :
:fleche: 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
:fleche: 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
:fleche: 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