Note de lecture : A Tour of C++ 2nd edition, par Bjarne Stroustrup

Note : 5 ; Une introduction qui résiste quand même beaucoup sous la dent

S’embarquer pour un tour avec Bjarne Stroustrup, cela ressemble davantage à une descente de rapides qu’à une croisière pour le troisième âge. La première édition s’arrêtait au C++11, celle-ci adresse C++17, avec un regard vers C++20, même si la norme a quelque peu évolué depuis la parution de l’ouvrage.
Le format du livre n’a guère changé : avec 225 pages sur 16 chapitres, il reste dans les canons du volume précédant. On pourrait croire que le premier chapitre à vocation introductive n réserve aucune surprise, mais ce serait sans compter sur la déduction de type avec « auto » ni sur les constexpr qui trouveront leur usage dans le template metaprogramming. Les types utilisateurs du second chapitre introduisent, mais avec si peu de clarté, les enum class qui doivent concurrencer les énumérations de Java et entretien fort perfidement la confusion entre struct et class ! La limpidité n’a jamais été le fort du créateur du C++.

Pour le chapitre 3 consacré à la modularité, ce sont les modules qui sont la grosse nouveauté… à venir dans le C++ 20 ! Mais le texte évoque aussi les évolutions concernant les exceptions et les structured bindings. Le texte est clair, ce qui n’est pas coutumier. Le chapitre 4 se focalise sur les classes et aborde aussi les conteneurs (qui seront aussi abordés plus loin). Peu de nouveautés en vue ici hormis les nouveaux initialiseurs et unique_ptr qui remplace avantageusement l’exécrable auto_ptr (paix à son âme).

Les opérations essentielles, au chapitre 5 aborde, entre autres chose, le move operator et les « références droites ». Le concept est difficile et il faut bien dire qu’il était acquis que cela serait très, très mal expliqué ici. Le détour par le « modern C++ » s’avérera indispensable. L’opérateur littéral est aussi évoqué sans non plus que son usage soit spécialement clair. Les templates sont au menu du chapitre6, ce qui nécessite de s’accrocher car il y a beaucoup de nouveautés ici. Toutefois, les gros morceaux seront d’avantage abordés au chapitre 7. Cela laisse à l’auteur la possibilité d’évoquer les concepts mais sans les présenter ce qui nous laisse joyeusement dans le brouillard. Bien joué.

Le chapitre 7, justement, introduit les Concepts : un langage dans le langage pour spécifier des exigences sur les arguments templates. Malgré les faibles talents pédagogiques du maître on arrive à toucher du doigt cette nouveauté qui sera sans aucun doute amenée à évoluer dans les futures versions. On comprend aussi assez rapidement que ce volet est surtout dédié aux concepteurs de librairies. Passons rapidement sur la vue stratosphérique de la librairie standard au chapitre 8, bâclée en 3 pages.
Le chapitre 9 évoque les strings, les basic_string et les string_view, mais surtout les expressions régulières. Tout bien considéré, le propos est plutôt clair. Les streams sont au menu du chapitre 10. Là aussi le propos est clair, mais les exemples assez faibles. Le sujet est de toute manière trop complexe pour être correctement abordé sur une douzaine de pages.

Les conteneurs sont de retour au chapitre 11. Je suis presque surpris de devoir dire qu’il s’agit d’une introduction tout à fait décente sur le sujet. Celui-ci ne connait par ailleurs que des évolutions mineures, du moins sur les aspects traités ici. Qui dit conteneurs, dit algorithmes. C’est le sujet du chapitre 12, et l’occasion de retrouver à nouveau les concepts. Ils ont le mérite d’illustrer de manière concrète un sujet qui était terriblement abstrait au chapitre 7 !

Le chapitre 13 regroupe un melting pot d’éléments de la librairie standard qui ne trouvaient place ailleurs. On y trouve nombre de nouveautés telles que les alternatives, any, optional et surtout les nouvelles fonctions chrono. Les fonctions numériques, avec un coup de projecteur sur les complexes sont traitées au chapitre 14 et ne réservent guère de surprises.

La gestion des threads est une grosse nouveauté du C++ 17, elle est l’objet du chapitre 15. Le sujet est traité brièvement mais avec clarté. Enfin le chapitre 16 nous donne un éclairage historique sur les évolutions du C++ depuis sa genèse, par la personne la plus qualifiée pour en parler ! Ne faites pas l’impasse sur ces quelques pages.

Quand on aborde un livre de Bjarne Stoustrup, il faut se préparer à galérer pour comprendre le propos. Le texte reste en grande partie fidèle à sa tradition. Une mention spéciale aux exemples qui recèlent des optimisations surprises là où le sujet est ailleurs ou qui utilise des écritures nouvelles mais non expliquées. Ils sont souvent source de perplexité. Mais il faut bien dire qu’il y a peu de textes qui font état des nouveautés du langage. L’excellent « Modern C++ » de Scott Meyers a déjà un train de retard et hélas ce dernier a pris sa retraite. Nous sommes donc coincés avec notre ami Danois.

Référence complète : A Tour of C++, 2nd edition – Bjarne Stroustrup – Addison Wesley / C++ in Depth series 2018 – ISBN: 978 0 13 499783 4

Publicité

Votre commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l’aide de votre compte WordPress.com. Déconnexion /  Changer )

Image Twitter

Vous commentez à l’aide de votre compte Twitter. Déconnexion /  Changer )

Photo Facebook

Vous commentez à l’aide de votre compte Facebook. Déconnexion /  Changer )

Connexion à %s

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur la façon dont les données de vos commentaires sont traitées.