Dmitry Nikolaev - stock.adobe.co
Carbon : le remplaçant de C++ imaginé par Google laisse perplexe
Le remplacement du C++ se fait attendre, mais le langage expérimental de Google, Carbon, est loin d’être une solution parfaite, selon certains experts du secteur.
La semaine dernière, Google a lancé Carbon, un langage expérimental open source sous licence Apache 2.0 voué à remplacer C++. Malgré cette ambition, les professionnels du secteur se montrent sceptiques.
Le langage C++ est un pilier du développement en entreprise, mais il présente des inconvénients et certains développeurs estiment qu’il doit être remplacé. Les raisons en sont nombreuses, notamment un code difficile à apprendre et à lire, des mécanismes de sécurité dépassés et un manque d’adéquation aux architectures et environnements matériels modernes, liste Chandler Carruth, ingénieur logiciel principal chez Google, lors de son discours d’ouverture à la conférence CppNorth le 18 juillet 2022. « Carbon s’appuiera sur l’écosystème C++ pour tenter de résoudre ces problèmes, en offrant une interopérabilité et une migration plus facile du code », ajoute-t-il.
Carbon est présenté comme étant bien adapté aux projets comportant une grande quantité de code C++. Cependant, le passage à un nouveau langage ne sera pas aisé.
« Le problème, c’est qu’il y a beaucoup de code C++ », affirme 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 coûteux ».
En outre, la modernisation du C++ pourrait être un point discutable. Les développeurs qui souhaitent bénéficier de nouvelles fonctionnalités se sont déjà tournés vers d’autres langages tels que Rust, un langage de programmation soutenu par Google, Microsoft et AWS, selon l’analyste.
Éliminer les bizarreries de C++ et les problèmes de sécurité
Lorsque le C++ a hérité du C, il a amorcé l’ensemble de l’écosystème C++, ce qui a été essentiel à son succès, rappelle Chandler Carruth lors de son discours d’ouverture. Cependant, à ces avantages – notamment la rapidité de la migration – se sont ajoutées des particularités de codage.
« Par exemple, nous mettons co_ devant les mots clés parce que nous sommes terrifiés à l’idée de casser le code existant », illustre Chandler Carruth.
« Les nombreuses bizarreries du C++ en font un langage complexe. La syntaxe peut être difficile à comprendre et à écrire, ce qui peut entraîner des erreurs et des bugs dont la correction est longue et coûteuse », d’après Morshed Alam, fondateur et éditeur de Savvy Programmer, un site d’apprentissage de la programmation. « En outre, le C++ n’est pas bien adapté au développement d’applications d’entreprise ».
Andrew Cornwall convient que le C++ n’est pas le meilleur langage pour le développement d’applications d’entreprise, mais il a bien servi pour construire une série d’infrastructures de base.
« [C++] est puissant », déclare-t-il. « Il vous permet de faire beaucoup de choses, y compris de vous tirer une balle dans le pied ».
Andrew CornwallAnalyste Forrester
Un autre problème avec C++ touche à la sécurité de la mémoire, qui pose un risque de sécurité important, prévient Dhaval Sarvaiya, cofondateur d’Intelivita, une agence de développement de jeux, de sites web et d’applications mobiles. Les données C++ stockées en mémoire ne disposent pas de contrôles d’accès ou d’écrasement, ce qui les rend vulnérables aux attaques par débordement de mémoire tampon, où des acteurs malveillants plantent, contrôlent ou modifient les variables internes d’un processus.
Ce défi majeur n’est pas une priorité pour l’équipe Carbon, selon la page GitHub de l’équipe. « Notre priorité initiale est de nous attaquer immédiatement aux problèmes importants et faciles à résoudre dans le domaine de la sécurité », précisent les ingénieurs de Google.
L’absence d’une réelle gouvernance pose question
Selon Chandler Carruth de Google, la résolution des problèmes liés à C++ se heurte au fait qu’il s’agit d’une norme établie par l’Organisation internationale de normalisation (ISO). Et les règles strictes de l’ISO obligent à garantir que les nations et les entreprises sont représentées dans sa définition. Cela ralentirait les travaux de modernisation du langage.
« Ce mode de représentation n’a pas de sens si le développeur s’attaque à des problèmes complexes tels que la dette technique du C++, qui va des règles arithmétiques difficiles à comprendre à la syntaxe la plus contrariante, où le code ne fait pas ce qu’il semble faire », tranche-t-il.
Pour des problèmes compliqués comme celui-ci, il s’agit plutôt de mettre en place des experts dotés d’un bon processus de décision, conseille Chandler Carruth. En raison de ce changement de priorités, presque tout le travail de développement de Carbon se fera sur GitHub avec Google Docs pour l’édition collaborative de la documentation, annonce-t-il.
« Le processus de développement se résumera à des pull requests sur GitHub – c’est tout », explique M. Carruth.
Cependant, ce changement d’orientation par rapport aux processus de l’ISO n’enlève rien au fait que Carbon sera confronté aux mêmes problèmes que C++, comme l’interopérabilité et les utilisateurs qui veulent des builds cohérents, souligne l’analyste de Forrester.
« Si Carbon réussit et établit une base de code significative, les committers de Carbon seront obligés d’établir un processus pour accepter ou rejeter les nouvelles fonctionnalités du langage », déduit-il. « Ce processus deviendra aussi bureaucratique que le processus C++ l’est aujourd’hui. »
Le modèle de développement open source de Carbon pose un problème supplémentaire. « La plupart des développeurs souhaitent que les langages évoluent lentement, et le modèle de Carbon, qui permet à quiconque de contribuer à une nouvelle fonctionnalité, entravera son adoption », anticipe Andrew Cornwall.
Selon la feuille de route du projet, Google espère qu’il n’y ait pas plus de 50 % en provenance d’une seule organisation. Cependant, la gouvernance de Carbon restera dans les mains des ingénieurs de Google jusqu’à l’horizon 2024-2025, période à laquelle les responsables du projet espèrent le confier à une fondation open source.
Andrew CornwallAnalyste, Forrester
En clair, les responsables de Carbon peuvent accepter ou non les pull requests sur GitHub, tandis que les discussions seront menées depuis deux autres canaux de communication.
Pas encore de véritable alternative à C++
Par le passé, des langages tels que D et Objective-C ont apporté des améliorations par rapport au C++, mais l’énorme base de code du C++ est difficile à remplacer, selon M. Cornwall. Rust n’est pas un substitut idéal du C++, car il n’est pas compatible avec son code source et ne possède pas de classes – une idée maîtresse de la programmation orientée objet. Toutefois, il prend en charge des fonctionnalités modernes telles que des allocations de mémoire qui le rendent plus sûr que le C++, informe-t-il.
« Le problème est aggravé par le fait que l’introduction de tous nouveaux langages – même s’ils ne sont pas expérimentaux – entraîne la frustration des développeurs », considère l’analyste.
« Demandez aux développeurs qui ont commencé à utiliser Swift ou Kotlin lorsque ces langages sont apparus, et comment ils ont dû s’adapter à l’évolution de ces langages. Ils étaient souvent frustrés de devoir revoir le code qu’ils avaient déjà écrit et de le réécrire pour prendre en charge la nouvelle version du langage », poursuit-il.
Étant donné que Carbon en est encore au stade expérimental, il est peu probable que les entreprises l’adoptent, rappelle Leonid Ivankin, un développeur Android chez MTS group, un opérateur télécom russe. « Carbon va sans doute prospérer dans les startups qui démarrent un projet à partir de zéro », imagine-t-il.
Pour le moment, Carbon n’est même pas prêt à l’usage, renseigne la page GitHub du projet, qui évoque une hypothétique fin des expérimentations en 2023. Mais la présence même de Google à la tête du projet n’est pas forcément rassurante, selon le développeur Android.
« Google, comme l’histoire l’a montré, peut non seulement lancer des projets, mais aussi les clore », remarque Leonid vankin, faisant référence aux cimetières de projets de Google qui ont laissé les développeurs en plan, notamment Noop, un langage de programmation expérimental, et AngularJS, un framework front end open source pour JavaScript.
Pour l’instant, le projet Carbon a obtenu 21 000 étoiles sur GitHub, a fait l’objet de 830 forks et dénombre déjà une soixantaine de contributeurs.