Blog 3 min de lecture

Nous avons vraiment besoin de garde-fous contre la richesse du C++

Share this article
Nous avons vraiment besoin de garde-fous contre la richesse du C++

L'équipe d'AtomicObject a bien décrit sur son site web le danger de la richesse du C++ :

C++ est un langage immensément riche. Cette richesse est à la fois une bénédiction et une malédiction. Une bénédiction, en raison de sa puissance expressive et de sa prise en charge de plusieurs paradigmes de programmation ; une malédiction, car cette richesse signifie complexité, et il y a beaucoup à maîtriser. C++ est un langage avec lequel on grandit, un langage dont chaque expérience peut enseigner de nouvelles fonctionnalités ou une meilleure compréhension. Puisque chaque fonctionnalité du C++ peut interagir avec les autres, apprendre le C++ ressemble au remplissage progressif d'une matrice de connaissances pas si éparse, formée par le produit cartésien du vecteur des fonctionnalités du C++ avec lui-même. Aucune utilisation sérieuse du langage ne devrait être entreprise sans de bonnes références à portée de main.

Depuis 2011, Microsoft a annoncé le retour du C++ dans de nombreux articles, et des experts Microsoft C++ comme Herb Sutter ont donné de nombreuses conférences expliquant pourquoi le C++ est de retour, recommandant surtout l'utilisation du C++ moderne. Au même moment, la norme C++11 a été approuvée, et nous avons commencé à parler du C++ comme d'un nouveau langage.

Cependant, en 2011, le C++ avait déjà plus de 30 ans d'histoire. Et il n'est pas facile de convaincre les développeurs que le nouveau C++ a simplifié de nombreux usages frustrants du langage et qu'il existe une nouvelle façon, moderne, d'améliorer le code C++.

Mais malheureusement, tous les efforts de la communauté C++ active et des experts reconnus n'ont pas suffi. Morale de l'histoire : si vous donnez à quelqu'un la possibilité de faire quelque chose avec un langage ou un outil, ne soyez pas surpris qu'il le fasse.

Aujourd'hui, nous avons besoin de garde-fous pour aider les développeurs à écrire du code C++ propre.

1. Un mode compilateur protégé pour utiliser un sous-ensemble du langage

Pour bénéficier de tout le travail remarquable du comité de normalisation et de la communauté C++, nous avons besoin de compilateurs qui nous permettent d'exclure certaines anciennes fonctionnalités du C++.

Il est vrai qu'il y a une contrainte importante lorsqu'on utilise les bibliothèques C++ existantes, mais si nous sommes convaincus que le C++ aura une très longue vie, nous devons commencer dès maintenant à préparer la transition vers le C++ moderne.

Les compilateurs existants ne sont pas conçus pour n'accepter qu'un sous-ensemble de la norme du langage. Cependant, après avoir travaillé avec Clang comme parseur pour CppDepend, nous pouvons confirmer que sa modularité, son implémentation et sa puissante fonctionnalité de diagnostics pourraient aider ses contributeurs à développer une version facilement personnalisable en ligne de commande pour exclure certaines anciennes fonctionnalités des normes C++ lors de la compilation de nos sources.

2. Diagnostics et avertissements du compilateur

Nous avons besoin de davantage de diagnostics et d'avertissements pour signaler les usages obsolètes. Clang rapporte déjà de nombreux diagnostics intéressants liés aux usages obsolètes, et peut-être qu'à l'avenir il offrira la possibilité d'interrompre la compilation si certains diagnostics spécifiques sont rapportés.

3. Des outils

Certains outils peuvent nous aider à détecter les usages obsolètes, et ils peuvent être intégrés au processus de build pour faire échouer la compilation si certaines règles sont enfreintes.

Clang-Tidy est un outil puissant pour détecter de nombreux défauts et usages obsolètes. CppDepend l'a intégré dans sa version 2017 et fournit également un langage de requêtes sur le code pour interroger le code comme une base de données, afin que vous puissiez facilement personnaliser vos règles de codage et détecter les usages obsolètes.

En résumé, nous avons besoin de meilleures solutions pour aider les développeurs C++ à passer au C++ moderne.

Share this article