Critique de Embracing Modern C++ Safely par John Lakos, Vittorio Romeo, Rostislav Khlebnikov et Alisdair Meredith | Just Software Solutions - Développement de logiciels sur mesure
Publié : December 26, 2025 at 06:12 PM
News Article
Contenu
Embracing Modern C++ Safely, écrit par John Lakos, Vittorio Romeo, Rostislav Khlebnikov et Alisdair Meredith, est un volume complet de plus de 1300 pages, dédié aux fonctionnalités du langage introduites dans C++11 et C++14. Le livre est organisé en sections qui se concentrent sur des fonctionnalités individuelles du langage, largement indépendantes les unes des autres, permettant aux lecteurs de les consulter dans presque n'importe quel ordre. Cette structure est globalement efficace, bien que certaines fonctionnalités étroitement liées de C++11 et C++14 soient réparties dans des sections distinctes et non consécutives, ce qui pourrait bénéficier d'un meilleur référencement croisé pour faciliter la navigation.\n\nLe livre est divisé en quatre chapitres principaux : un chapitre zéro introductif, et trois parties intitulées "Fonctionnalités sûres", "Fonctionnalités conditionnellement sûres" et "Fonctionnalités non sûres". Cependant, l'utilisation du terme "sûr" est quelque peu problématique. Les auteurs définissent la sécurité non pas en termes de correction technique ou de sécurité typique en programmation, mais plutôt en termes de risque commercial lié à l'adoption de nouvelles fonctionnalités du langage dans une base de code ancrée dans C++03 sans formation complète des développeurs. Par conséquent, seul un petit sous-ensemble de fonctionnalités est classé comme véritablement "sûr", tandis que beaucoup d'autres sont reléguées à la catégorie "conditionnellement sûres", impliquant la nécessité d'une formation pour les utiliser efficacement. Le critique considère cette classification comme l'aspect le plus faible du livre et recommande aux lecteurs de l'ignorer. Au lieu de cela, les lecteurs devraient se concentrer sur les sections couvrant les "Cas d'utilisation", les "Pièges potentiels" et les "Gênes" pour se forger leur propre jugement.\n\nUne discussion notable dans le livre concerne le concept de "POD généralisés" (types de données simples). Les auteurs expliquent les définitions standard de C++ relatives aux objets triviaux et trivialement destructibles avant d'introduire leur propre terme, "notionnellement trivialement destructible". Ce terme décrit des objets dont les destructeurs n'ont aucun effet sur la logique du programme, comme ceux utilisés uniquement pour la journalisation. Cependant, ce concept ne fait pas partie de la spécification du langage C++ et comporte un risque de confusion en raison de sa similitude avec la terminologie établie. De plus, l'adoption de cette notion pourrait potentiellement conduire à des pratiques de codage non sûres et à un comportement indéfini, ce qui contredit l'objectif du livre de promouvoir une utilisation sûre.\n\nLe livre couvre exclusivement les fonctionnalités du langage et omet les fonctionnalités de la bibliothèque, qui font partie intégrante des améliorations offertes par C++11 et C++14. Par exemple, les composants améliorés de la bibliothèque standard comme std::unique_ptr versus std::auto_ptr ne sont pas explorés ici. Bien que cette omission soit compréhensible compte tenu de la longueur considérable du livre, elle représente une occasion manquée de fournir une image plus complète du C++ moderne.\n\nD'un point de vue physique, le format du livre présente quelques défis. Sa taille et son poids considérables le rendent inconfortable à tenir pendant de longues périodes, obligeant souvent à adopter des postures de lecture inconfortables. De plus, le livre en format broché utilise un papier très fin qui laisse transparaître le texte du verso, et les commentaires dans les exemples de code sont en police gris pâle, difficile à lire dans de nombreuses conditions d'éclairage. Ces facteurs peuvent nuire à l'expérience du lecteur, d'autant plus que les commentaires sont essentiels pour comprendre les exemples de code. Les éditions numériques peuvent atténuer certains de ces problèmes, bien que le critique ne l'ait pas confirmé.\n\nMalgré ces critiques, le livre offre une valeur substantielle grâce à une couverture détaillée de chaque fonctionnalité du langage. Chaque section explique comment la fonctionnalité diffère de ses homologues C++03, fournit des détails exacts sur la syntaxe, décrit les cas d'utilisation prévus et met en évidence les pièges potentiels. Cette profondeur d'information fait du livre une ressource utile pour les développeurs cherchant à comprendre comment fonctionnent les fonctionnalités modernes de C++ et quels risques elles peuvent comporter. Bien qu'une formation formelle soit recommandée pour les fonctionnalités plus complexes, les exemples et explications du livre fournissent une base solide pour commencer.\n\nEn résumé, Embracing Modern C++ Safely est une ressource recommandée de manière conditionnelle. Il contient une mine d'informations précieuses mais est entravé par des choix organisationnels, la terminologie controversée de "sécurité" et des considérations de conception physique. Les lecteurs potentiels devraient peser ces facteurs et envisager de compléter leur apprentissage par une formation et des matériaux supplémentaires, en particulier sur les fonctionnalités de la bibliothèque, pour acquérir une compréhension complète du C++ moderne.
Insights clés
La critique de "Embracing Modern C++ Safely" met en lumière plusieurs faits clés : il s'agit d'une ressource technique volumineuse axée sur les fonctionnalités du langage C++11 et C++14, structurée en sections indépendantes ; il introduit un système de classification unique de "sécurité" basé sur le risque d'adoption commerciale plutôt que sur la sécurité technique ; il exclut les fonctionnalités de la bibliothèque, qui sont essentielles à l'utilisation moderne de C++ ; et il présente des défis de conception physique pouvant affecter l'expérience du lecteur.
Les principaux acteurs concernés incluent les développeurs en transition depuis C++03, les formateurs techniques et les équipes de développement logiciel évaluant les risques liés à l'adoption de nouvelles fonctionnalités du langage.
Les groupes périphériques affectés peuvent inclure les chefs de projet et les organisations cherchant à moderniser des bases de code héritées.
Les impacts immédiats impliquent des changements dans les besoins de formation et les pratiques de codage, tandis que les effets à long terme peuvent influencer les stratégies d'adoption des normes modernes de C++.
Historiquement, des transitions similaires, comme le passage de C++98 à C++03, ont rencontré des défis comparables dans l'équilibre entre nouvelles fonctionnalités du langage et préparation des développeurs.
À l'avenir, il existe une opportunité d'affiner les cadres éducatifs autour des fonctionnalités contemporaines de C++ pour atténuer les risques.
Cependant, le fait de ne pas aborder les questions de formation et de clarté pourrait perpétuer les mauvais usages et introduire une dette technique.
Du point de vue d'un expert technique, les recommandations incluent l'amélioration des références croisées dans le livre pour une meilleure utilisabilité, la clarification de la terminologie pour éviter la confusion, et l'intégration de la couverture des fonctionnalités de la bibliothèque dans les éditions futures.
La priorité est donnée d'abord à la clarification de la terminologie en raison de son impact potentiel sur la sécurité, suivie de l'amélioration de la navigation, puis de l'expansion du contenu.
Critique de Embracing Modern C++ Safely par John Lakos, Vittorio Romeo, Rostislav Khlebnikov et Alisdair Meredith | Just Software Solutions - Développement de logiciels sur mesure | AI-U News