Note de lecture : Effective Modern C++, par Scott Meyers

Note : 7 ; Une verve et une pédagogie toujours présente, mais dans un ouvrage (et un sujet) plus difficile d’accès.

Je suis bien rouillé sur le C++. Je le savais déjà, mais ce texte m’en a fait prendre conscience de manière nette. Par ailleurs le C++ et la manière dont on doit penser son code ont aussi évolué de manière radicale, et ce texte plus que tout autre m’en a fait prendre conscience.

Ce sont 300 pages qui sont consacrées à couvrir les 42 items de ce texte. L’ensemble est regroupé en 8 chapitres. La place dédiée à chaque item est significativement plus importante que dans « effective C++ ». Le premier chapitre « deducing types » fait un peu moins de 30 pages et couvre 4 items. Il fait un choc car on prend de face l’un des aspects du C++ 11 les plus complexes : la gestion des types. Et là il faut bien comprendre les notions de lvalue, de rvalue (à propos, ne sautez pas l’introduction) et de référence universelle. Ajoutons-y l’inférence de type et une touche de template métaprogramming, vous vous dites que le livre va être très long, d’autant que l’auteur semble avoir perdu son humour au passage.

Sans être hilarant, le court chapitre 2 dédié à l’inférence de type avec auto nous permet de reprendre notre souffle. Peut-être ces explications nous auraient même été utiles au premier chapitre ? Je retrouve vraiment le style inimitable de Scott Meyers au chapitre 3. Les sujets traités sont moins ardus, mais ce chapitre couvre quand même 11 items sur 70 pages où l’auteur nous fait découvrir « in situ » les nouveaux mots-clés, les nouvelles constructions du C++ … et leurs sombres recoins. Un chapitre vraiment instructif et agréable.

Au chapitre 4 il est question de smart pointers : unique_ptr (qui remplace avantageusement l’ignoble auto_ptr), shared_ptr et même weak_ptr. On prend vraiment conscience ici qu’il ne faut plus jamais manipuler de pointeurs « nu » avec le C++ modernes, la sémantique du « move » abordée plus loin pouvant même rendre cela problématique. Un aspect que le « tour of C++ » de Stroustrup ne permettait pas d’appréhender dans toute sa dimension. Justement, le chapitre 5 est consacré à ces sujets ardus que sont le move (qui ne move rien du tout), au forward (qui ne forwarde pas plus) et aux références universelles (qui ne sont pas si universelles que ça). Le chapitre explique nombre de choses fondamentales, mais il est aussi franchement ardu.

J’ai été étonné de voir seulement 25 pages consacrées à une caractéristique aussi importante que les lambda, mais l’auteur parvient quand même à couvrir beaucoup de terrain. Il nous convainc aussi au passage que le std ::bind apparu au C++ 98 et amplifié au C++11 devait être abandonné et ce d’autant plus que l’on s’intéresse préférentiellement au C++17 ! Le chapitre 7 est nettement plus rugueux qui nous dévoile les constructions de la librairie standard dédiées au multithreading. Nombre de concepts nécessitent d’être appréhendés et la librairie standard laisse planer un doute sur son niveau d’achèvement tellement les cas particuliers et les effets de bord semblent nombreux. Malheureusement l’auteur échoue à montrer la limpidité qu’il délivre habituellement.

Le livre se referme sur un court chapitre 8 consacré deux sujets assez périphériques. Peut-être pour terminer sur une note plus soft.

Le C++ n’a jamais été un langage tendre. Concurrence aidant, le langage s’est positionné sur le créneau de l’efficacité et de la performance (oui, je pense au « move over copy »). Si la chose était sous-jacente aux volumes précédents, ici il est clair que l’on en est à expliquer comment fonctionne le compilateur afin de l’utiliser à notre avantage ! Le langage est devenu bien plus ardu et mon manque de pratique a rendu la compréhension du propos plus difficile. Mais le texte lui-même s’est complexifié. Même si Scott Meyers reste un excellent pédagogue, la teneur des sujets a mis à mal ses qualités. Le texte reste une référence pour le C++ moderne, une référence incontournable, même. Mais votre niveau de motivation devra être à la hauteur.

Effective Modern C++, par Scott Meyers

Référence complète : Effective Modern C++ – Scott Meyers – O’Reilly 2014 – ISBN: 978 1 491 90399 5

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 )

Photo Google

Vous commentez à l’aide de votre compte Google. 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.