Carbon, le potentiel successeur de C++ initié par Google
Posté le 18 octobre 2022 par PierreB
Il y a quelque mois, des ingénieurs de Google ont proposé un nouveau langage de programmation open source appelé Carbon. Si ce dernier est purement expérimental, il pourrait nourrir l’ambition de succéder au langage C++ dont certains lui reprochent une trop lente évolution, synonyme de vieillesse. Les normes établies par l’Organisation Internationale de Normalisation (ISO) ralentiraient les travaux de modernisation du langage, ce qui bloquerait l’ajout de nouvelles fonctionnalités au C++. La conversion de gros projets C++ en Rust ne serait pas chose facile.
Au terme d’une conférence C++ CPP North à Toronto, l’ingénieur logiciel principal de Google Chandler Carruth a présenté Carbon, un langage qui devrait assurer l’interopérabilité avec le populaire code C++. Selon lui, Carbon a de nombreux atouts puisqu’il permet une migration relativement facile, une grammaire plus simple et des importations d’API plus fluides. Une version de base 0.1 est attendue d’ici la fin de l’année, Google étant actuellement en train d’imaginer les outils pour assurer la traduction du C++ en Carbon. Autre particularité du projet : il sera basé sur des principes de programmation nouveaux, avec notamment un système générique qui supprime la fastidieuse tâche de vérification du code pour chaque instanciation.
Pourquoi le C++ est-il encore largement utilisé ?
Historiquement le langage C++ fût dominé par des concurrents qui contenaient une part écrasante du marché tel que Java, Python, JavaScript, Ruby ou encore C#. Pourtant, il s’est logiquement imposé comme un incontournable avec des domaines d’application divers. Les logiciels particulièrement gourmands comme les simulateurs, les jeux AAA, les serveurs de transaction financière, les serveurs de streaming, les logiciels de CAO et de design puisent dans les limites des ressources des ordinateurs. Le C++ intervient à cette échelle grâce à sa rapidité d’exécution et c’est ce qui fait toute sa force.
De plus, il est un langage adapté à différents environnements, des supercalculateurs Linux aux téléphones mobiles, Windows 10 en passant par des systèmes d’exploitation personnalisés des gouvernements. Si on lui reproche aujourd’hui une trop lente évolution, le C++ a pourtant évolué en passant par une syntaxe plus moderne lui conférant une force dans l’architecture, le design et les bonnes pratiques du génie logiciel. Les templates C++ permettent d’élargir le champ des possibles par rapport à d’autres langages. Ils permettent de gagner du temps à l’exécution en donnant la possibilité d’écrire du code lors de la compilation.
Pour finir, le C++ est constamment présent dans le top 5 de l’Index Tiobe, ce qui semble prouver qu’il est très recherché sur internet.
Mais alors quelles sont les limites du C++ pour que Google initie son projet Carbon ?
La sécurité de la mémoire au centre des préoccupations
La sécurité de la mémoire est le point négatif du langage C++. Les créateurs de Carbon étudient les 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. Ils souhaitent notamment créer un mode de construction de débogage par défaut complet afin de proposer un sous-ensemble sécuritaire de Carbon. Le langage devrait supporter les éléments suivants :
- un 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
- un gestionnaire de paquets intégré
Carbon et Rust : deux concurrents au C++
Rust est un langage de programmation nouveau apportant une solution pour la gestion de la mémoire, et soutenu par Google, Microsoft et AWS. S’il a longtemps été le langage de référence pour la création d’applications critiques en termes de performances, le C++ souffre aujourd’hui d’un certain nombre de problèmes que rencontrent les développeurs. Il aurait accumulé des décennies de dettes techniques, entrainant avec lui de nombreuses pratiques dépassées qui faisaient partie du prédécesseur du langage, le C. Selon 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 rend complexe 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. C’est un langage polyvalent, mais 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++ comme mentionné plus haut.
Le projet Carbon se veut indépendant malgré l’implication initiale de Google
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++.
Selon certains analystes, et notamment Andrew Cornwall, analyste principal chez Forrester Research : « Changer de langage signifierait qu’il faudrait réécrire une grande quantité de code C++ délicat à optimiser, parfois des décennies après le départ à la retraite de son auteur. Ce ne serait pas impossible, mais simplement couteux ».
Sources : Google / Developpez.com