Blog 4 min de lecture

Normes C++ et bonnes pratiques : le combo parfait

Share this article
Normes C++ et bonnes pratiques : le combo parfait

Le C++ a stagné pendant de nombreuses années, et de nombreux développeurs étaient convaincus que le langage connaîtrait le même sort que COBOL, Fortran et VB6. Au lieu de cela, contre toute attente, le C++ est revenu de ses cendres, et les nouvelles normes changent considérablement la façon dont le langage est utilisé.

L'évolution du C++, avec l'ajout de nombreuses fonctionnalités utiles, ne signifie pas que la norme C++98 était mauvaise. En effet, elle fournissait de nombreuses fonctionnalités utiles pour développer toutes sortes d'applications. Il existe de nombreux anciens projets C++ bien conçus dont le code est facile à maintenir et à faire évoluer.

Par exemple, Doom, développé par John Carmack, est un jeu C++ bien conçu qui n'utilise que les mécanismes de base de la norme C++98.

Voici le genre de témoignage que l'on trouve en cherchant des articles sur Doom 3 :

I spent a bit of time going through the Doom3 source code. It’s probably the cleanest and nicest looking code I’ve ever seen.

La clé du succès n'était pas la richesse du langage, mais plutôt le respect de bonnes pratiques qui gardent le code facile à lire, à maintenir et à faire évoluer.

Il est vrai que tous les développeurs n'ont pas les compétences de John Carmack, et qu'ils ont peut-être besoin d'un langage plus puissant qui les aide à se concentrer sur la couche métier de leurs applications. Cependant, même si vous utilisez le langage de programmation le plus puissant, si vous adoptez de mauvaises pratiques, le code sera très difficile à comprendre ou à maintenir.

Même avec un langage de programmation complexe comme l'assembleur, on peut avoir du code propre : le jeu Prince of Persia est la preuve que rester simple fonctionne même avec un langage de bas niveau.

Prince of Persia a été développé à l'origine par Jordan Mechner et sorti en 1989 sur Apple II ; il a représenté un grand bond en avant dans la qualité de l'animation dans les jeux vidéo. Le 17 avril 2012, Jordan Mechner a publié le code source de Prince of Persia. En explorant sa base de code, on constate que :

  • Le nommage est clair et facile à comprendre.
pp2
  • Le code est découpé en de nombreuses petites sous-routines.

Le langage assembleur 6502 est très bas niveau, et le principe « diviser pour régner » est appliqué pour rendre le code plus facile à comprendre et à maintenir. En effet, le code est découpé en de nombreuses petites sous-routines, ce qui le rend plus facile à lire et à maintenir. Voici un exemple de petite sous-routine de son code source :

pp3

Pour revenir aux nouvelles normes C++, nous pouvons écrire du code propre en utilisant toutes les nouvelles fonctionnalités utiles. En revanche, si nous suivons de mauvaises pratiques, nous pouvons aboutir à du code difficile à comprendre et à maintenir. Par exemple, cet intéressant article parle de l'abus du mot-clé auto.

Bjarne Stroustrup et Herb Sutter ont reconnu le besoin de directives de base pour écrire du code C++ moderne efficace. Il y a quelques années, ils ont introduit les «C++ Core Guidelines». Voici la motivation derrière l'introduction de ces directives, tirée de leur dépôt GitHub :

This document is a set of guidelines for using C++ well. The aim of this document is to help people to use modern C++ effectively. By "modern C++" we mean C++17, C++14, and C++11. In other words, what would you like your code to look like in 5 years' time, given that you can start now? In 10 years' time?

The guidelines are focused on relatively high-level issues, such as interfaces, resource management, memory management, and concurrency. Such rules affect application architecture and library design. Following the rules will lead to code that is statically type safe, has no resource leaks, and catches many more programming logic errors than is common in code today. And it will run fast -- you can afford to do things right.

Avoir des directives est utile, mais les développeurs ne peuvent généralement pas passer des heures à relire manuellement le code pour vérifier leur conformité. Pour cette raison, il vaut mieux utiliser un outil pour effectuer ces vérifications.

clang-tidy est l'outil à utiliser ; il fournit de nombreuses vérificationsintéressantes, dont certaines portant sur des règles des CppCoreGuidelines.

Pour résumer, ces nouvelles normes C++ sont une évolution bienvenue — merci à tous ceux de la communauté C++ qui ont contribué à les rendre possibles, car ce n'était pas une tâche facile. Cependant, sans bonnes pratiques et directives de base, le code peut vite devenir illisible, impossible à maintenir et difficile à faire évoluer.

Share this article