Aide-Mémoire C++ Moderne – DUNOD Janvier 2020

Mon livre « Aide-Mémoire C++ Moderne » est terminé. Je livre à DUNOD le 31 Décembre.

Les notes de l’auteur sont ici: https://christophepichaud.home.blog/2019/12/21/aide-memoire-c-notes-de-lauteur-update-dec-2019/

Les remerciements sont ici : https://christophepichaud.home.blog/2019/12/21/aide-memoire-c-remerciements-update-dec-2019/

La couverture que j’ai designée est la suivante:

Aide-Mémoire C++ – Remerciements (update Dec 2019)

Remerciements

 

Ce livre a été relu et corrigé par de nombreux amis et relations de travail. Parmi eux, merci plus particulièrement à Alain Zanchetta (Microsoft Corp.) qui est l’auteur de la préface mais surtout avec qui les chapitres 1 à 14 de la Partie I, le langage, ont été relu en l’espace record de 3 semaines. Sachant que le temps d’Alain est précieux, il m’a confié que son temps de déjeuner quotidien sur le campus Microsoft était consacré à la relecture du livre sur sa Surface Pro 7 (son cadeau de Noël). Ses remarques et commentaires ont permis de rendre le livre plus clair, plus juste et c’est un effort considérable que je salue avec tout le respect qu’il se doit. Encore une fois, Merci !

Merci aussi à Eric Mittelette (Microsoft Corp.) et Jean-Christophe Godefroy (Altran) pour leurs instants de vérité et leur justesse.

Je tiens aussi à remercier Sy Brand (Microsoft Corp.), Stephan T. Lavavej (Microsoft Corp.) et Marian Luparu (Microsoft Corp.), membres de l’équipe Visual C++ pour leur patience et leurs réponses à mes questions sur le forum MVP.

Merci aussi à Eric Vernié (Microsoft France), qui m’a donné ma chance et permis de faire speaker à de nombreuses reprises sur les TechDays en France de 2011 à 2014 et qui a été mon mentor chez Microsoft en 2017. Eric, tu seras toujours mon softy préféré car avec Eric Mittelette et pour le compte de Microsoft France, vous étiez les évangélistes qui défendaient C++ et qui prenait soin à chaque fois de me faire une place pour une session sur C++, que ce soit avec Alain, Loïc Joly ou en solo. Il fallait se battre pour avoir une session sur C++ et tu as toujours été là pour faire la promotion de C++ et nous faire une place dans le programme des évènements. Notre vanne préférée pour les sceptiques c’était : « Hey les gars, Windows, Office, IE SQL Server, c’est fait en quoi ? En C++ ! » … Que de souvenirs !

Merci à Raphael Mansuy (CALIATIS), Daniel Begue (Orano), Fréderic Steczycki , Jean-Pierre Gervasoni (SYDEV), Michel Foucault (freelance) et Sylvain Pontoreau.

Je tiens aussi à remercier mes anciens collègues de Sogeti que sont François Merand, Keelan Clech, Jean-Baptiste Bron et Cédric Georgeot. François tient une place toute particulière pour moi car quand il m’a recruté chez Sogeti en 2011 pour m’intégrer chez les Rangers by Sogeti, il voulait créer une cellule d’expertise sur les Technologies Microsoft et il voulait avoir des « experts communiquant », c’est-à-dire des consultants qui font du blogging, des évènements, des articles techniques, des livres et qui sont « on the Edge », qui passent des certifications, qui deviennent MVP et influent dans l’écosystème Microsoft. C’est grâce à lui que j’ai donné mes premiers talk comme speaker et que je me suis mis à l’écriture d’articles techniques pour la revue Programmez de François Tonic. Il m’a donné goût à l’écriture technique. François, tu as changé ma vie ! Ce livre c’est aussi une contribution dans mon activité de Rangers, une communauté technique qui existe toujours et qui est devenu indépendante[1] ; j’en suis le Community Manager.

Merci à Martine Thiphaine, ma Community manager du programme Microsoft MVP[2] qui m’a annoncé que j’étais MVP Developer Technologies 2019-2020 pour la deuxième année de suite. Merci, ça récompense une activité communautaire de partage autour de C++ et Windows. Ce livre est aussi une contribution pour mon profil MVP.

Mes meilleurs amis sont aussi à remercier car je ne les ai pas ménagés durant ces trois mois d’écriture : Philippe Rogie alias mon petit Quicky (Johnbry), Philippe Brand alias ma Brandouille (freelance) et Emeric Blumberger alias Blummy (SocGen). Ils ont eu à subir mes sauts d’humeur fréquents et mes coups de fils intempestifs en pleine journée…

Je tiens aussi à remercier le meilleur d’entre nous sur C++, à savoir mon ami Olivier Favre-Simon qui m’a fait découvrir Gentoo, Ubuntu, GCC, Boost et avec qui je suis impatient de refaire des soirées Cigare & Whisky.

Enfin, Merci à Jean-Luc BLANC de chez DUNOD qui a cru dans ce projet. Il a de suite été convaincu de l’utilité d’avoir un ouvrage en français sur le C++ Moderne. Il a quelques ouvrages français sur C++ mais si peu sur le C++ Moderne. Maintenant que ce projet a pris forme, je réalise que c’était possible.

Depuis que je lis The C Programming Language (Brian W. Kernighan, Dennis M. Ritchie), C++ Primer (Stanley B. Lippman, Josée Lajoie, Barbara E. Moo. – 5th ed.), C++ Coding Standards: 101 Rules, Guidelines, and Best Practices (By Herb Sutter, Andrei Alexandrescu), Effective Modern C++ (Scott Meyers), A Tour Of C++ (Bjarne Stroustrup – 2nd ed.), The C++ Programming Language (Bjarne Stroustrup – 4th ed.), je n’aurais jamais imaginé pouvoir contribuer aux ouvrages sur C/C++. A force de pratiquer et d’acquérir de l’expérience, le temps est venu pour moi de mettre par écrit avec un style qui m’est propre les différents éléments de ce fabuleux langage qu’est C++.

 

[1] www.netazurerangers.com

[2] Microsoft Most Valuable Professional (http://mvp.microsoft.com )

 

Aide-Mémoire C++ – Notes de l’Auteur (update Dec 2019)

Note de l’auteur

 

The World is built on C++.

Herb Sutter

 

C++ est profondément riche et intense comme langage. Avec le temps, il est devenu élégant et Moderne. Malgré des milliards dépensés en marketing, il n’a pas été remplacé par les langages dits « productifs ». Les systèmes d’exploitation comme Microsoft Windows, Mac OS ou Linux sont toujours faits avec. Les suites bureautiques comme Office aussi… Les jeux vidéo…

En 2018, j’ai contacté DUNOD pour leur proposer ce projet de livre car il n’existe que peu de livre sur le C++ Moderne, c’est-à-dire le C++ post C++11, date à laquelle sont apparues tout un ensemble de fonctionnalités comme les pointeurs intelligents, la déduction de type automatique (auto) et la suprématie de la bibliothèque standard STL avec ses strings, containers et algorithmes entre autres.

Beaucoup de livres C+ en français parlent de C++03 mais ne  détaillent pas les fonctionnalités des derniers standards comme C++14 et C++17. Le nouveau standard C++20 arrive en Janvier 2020. Ce livre vous permet, par une approche par l’exemple, de connaitre toutes ses fonctionnalités.

En tant que professionnel du développement C++, je suis MVP  Developer Technologies et j’ai accès au code source des derniers O.S. Windows. Pour vous donner une idée rapide, Microsoft a toujours fait ses O.S. et ses logiciels en C/C++. Pour Microsoft, le C++ c’est naturel, c’est comme l’électricité. Il n’y a pas de débat. On veut développer un produit, on le fait en C++. C’est avant tout une nécessité de performance par défaut et de ce que les gens nomment « Power and Performance ».

Le C++ ne fait aucun compromis là-dessus. Sans violer le NDA  qui me lie à Microsoft, je peux vous dire que le code source de Windows 10 est truffé de C++ Moderne, des templates, d’utilisation de la STL et utilise toutes les fonctionnalités possibles de C++. Le code est propre, dense, orienté objet et comme dit Marian Luparu, Principal Group Manager de Visual C++, « Microsoft is committed to C++ ». Cela veut dire que Microsoft s’engage sur C++. Il ne faut pas oublier que son équipe et son produit, Visual C++ (MSVC), le compilateur C++ de Microsoft, compile les produits phares comme Windows 10, Windows Server, Office, SQL Server entre autres donc Visual C++ est le joyau interne de Microsoft : c’est lui qui fabrique les logiciels phares de la société de Redmond. Chez Microsoft, chaque groupe produit fait du C++.

En 2011, Channel9 sortait une vidéo de Craig Symonds et Mohsen Agsen : C++ Renaissance[3]. Le C++ connaît actuellement une renaissance. Cela signifie que, par définition, le langage, les compilateurs et l’outillage de composition évoluent et on arrive à un état qui maximise l’efficacité, la productivité et la créativité des développeurs natifs dans tous les domaines matériels et logiciels (PC, appareils mobiles, systèmes d’exploitation, applications utilisateur, services, etc.). C++ est un langage de programmation « système » puissant, mais c’est plus que cela. C’est orienté objet, mais c’est plus que cela.

Dans le monde Linux, la suprématie de C/C++ est sans comparaison. Comme dans Windows, le noyau (kernel)  et les pilotes de périphériques (drivers) sont écrits en C et tout le reste en C++ sauf les couches historiques. Les applications phares comme Apache, MySQL, Redis pour ne citer qu’elles sont faites en C/C++. Il existe même une distribution Linux nommée Gentoo qui propose de construire son environnement Linux à partir des sources. Le système portage télécharge   un petit compilateur pour compiler GCC puis GCC compile tout : le noyau, les drivers, les couches de l’OS, Bash & Tools, X-Motif, Gnome, KDE, etc.

Je ne remercierais jamais assez Papy Jean-Marc de m’avoir fait découvrir le monde des ordinateurs quand j’étais tout jeune. Mon premier ordinateur était un Commodore C64 ou je découvrais les jeux vidéo. Puis nous avons eu un Amiga dans les années 80/90 et j’ai découvert AMOS Basic et je suis tombé dans la programmation. Je suis tombé par hasard sur les compilateurs Aztec C et Lattice C/C++ et ce fut mes débuts en C/C++. Puis, mon père a ramené de son travail un PC 286 SX25  avec Borland Turbo C et C++ pour MS-DOS. J’ai fait mes premières applications sous DOS puis pendant mes études, j’ai réalisé tous mes projets en Visual C++ sous Windows. A l’époque, nous sommes sous Windows 3.11 et Visual C++ 1.52c 16 bits.

En 1994, Je fais un stage dans une entreprise (Replay Software) à côté de Dijon qui fait un logiciel de 3D sous Windows NT. Les managers, Olivier Daguet et Jean-Claude Lavoignat me font découvrir la programmation par interruption en MS-DOS en C et surtout la programmation Windows SDK via la documentation MSDN Library July 1994, la documentation des développeurs Microsoft. Je tombe amoureux de cet environnement de Microsoft, des API Windows et du C/C++. Je découvre les CD MSDN et le Windows SDK et je suis fasciné par le système Windows. Ma première rémunération se fait en composants matériel : une tour avec un processeur DX2-66.

En 1995, je finalise mon apprentissage du C++ et de la programmation Windows avec les MFC (Microsoft Foundation Classes). J’ai la révélation : ce mode de développement des applications est l’avenir. Encapsulation de l’API Windows C en C++, canevas d’application SDI/MDI (Single/Multi Document Interface), support des applications composites et OLE2, support d’accès aux bases de données via ODBC, composants graphiques (toolbars, menu, dialog), etc.

Mon premier job en Septembre 1995 est chez Cerius Informatique à Dijon, le GIE des Banques Populaire (nommé maintenant iBP) et je suis missionné en freelance pour migrer le code OS/2 des serveurs d’agence vers Windows NT 3.51 sous la Direction de Jean-Pierre Muntz. Avec mon partenaire, Raphaël Mansuy, major de promotion du DEA Intelligence Artificielle et Base de données, nous faisons une solution C++ sous Windows qui communique avec le Mainframe IBM qui sera adoptée par toutes les agences Banques Populaire (Projet Popix Win01). En 1997, je participe au projet Int01 de site Internet de gestion des comptes, bâti sur l’architecture des serveurs d’agences en C++ ISAPI sous Windows NT 4. Ce fut l’un des premiers sites de consultation de comptes en ligne en France. Avec le règlement de ma première facture, je m’abonne à MSDN. Je reçois toutes les mises à jour du produit Visual C++ et du Windows SDK. Je m’achète aussi plein de livres Microsoft Press comme « Programming Windows », « Inside Visual C++ » et de livres sur C++. Depuis 25 ans, la passion est intacte.

En 2001, je décroche un contrat à la Société Générale pour debugger l’application principale (MAIA, projet URTA) des serveurs d’agences qui communique avec le Mainframe IBM sous la Direction de Pierre Michel et je découvre le monde des middlewares avec Tuxedo mixé avec des composants COM multithreads. Je deviens un spécialiste des boites noires de communication.

En 2003, mon ami Philippe Brand m’introduit à la Présidence de la République (Elysée) pour réaliser une application de communication de réception des dépêches d’agence en communication avec un serveur Linux avec aussi un site Web IIS ASP et des composants COM en C++ via les ATL (Active Template Library) et un service Windows sous Windows Server 2003. Ce sera une aventure formidable de 4 années sous la mandature Jacques Chirac. Le C++ mène à tout !

Ces expériences m’ont marqué car elles ont forgé le socle de ma carrière professionnelle et la passion pour C++ est intacte.

 

Christophe Pichaud (christophep@cpixxi.com),

Paris, France.

Vendredi 20 Décembre 2019

[1] Most Valuable Professional. Cf. https://mvp.microsoft.com/

[2] Non Disclosure Agreement ou Accord de Confidentialité.

[3] https://channel9.msdn.com/Shows/Going+Deep/Craig-Symonds-and-Mohsen-Agsen-C-Renaissance

 

Aide-Mémoire C++ – Remerciements

Remerciements

Ce livre a été relu et corrigé par de nombreux amis et relations de travail. Parmi eux, merci plus particulièrement à Eric Mittelette (Microsoft Corp.), Alain Zanchetta (Microsoft Corp.) et Jean-Christophe Godefroy (ALTRAN) pour leurs instants de vérité et leur justesse.

Merci aussi à Eric Vernié (Microsoft France), Raphael Mansuy (CALIATIS), Daniel Begue (Orano), Fréderic Steczycki, Jean-Pierre Gervasoni (SYDEV), Michel Foucault (freelance) et Sylvain Pontoreau.

Je tiens aussi à remercier mes anciens collègues de Sogeti que sont François Merand, Keelan Clech, Jean-Baptiste Bron, Cédric Georgot.

Mes meilleurs amis sont aussi à remercier car je ne les ai pas ménagés durant ces trois mois d’écriture : Philippe Rogie (Johnbry), Philippe Brand (freelance), Emeric Blumberger (SocGen).

Je tiens aussi à remercier Simon Brand (Microsoft Corp.) et Stephan T. Lavavej (Microsoft Corp.), membres de l’équipe Visual C++ pour leur patience et leurs réponses à mes questions sur le forum MVP.

Je tiens aussi à remercier le meilleur d’entre nous sur C++, à savoir mon ami Olivier Favre-Simon qui m’a fait découvrir Gentoo, Ubuntu, GCC, Boost et avec qui je suis impatient de refaire des soirées Cigare & Whisky.

Enfin, Merci à Jean-Luc BLANC de chez DUNOD qui a cru dans ce projet. Il a de suite été convaincu de l’utilité d’avoir un ouvrage en français sur le C++ Moderne. Il a quelques ouvrages français sur C++ mais si peu sur le C++ Moderne.

 

Aide-Mémoire C++ – Notes de l’Auteur

Note de l’auteur

 

The World is built on C++.

Herb Sutter

C++ est profondément riche et intense comme langage. Avec le temps, il est devenu élégant et Moderne. Malgré des milliards dépensés en marketing, il n’a pas été remplacé par les langages dits « productifs ». Les systèmes d’exploitation comme Microsoft Windows, Mac OS ou Linux sont toujours faits avec. Les suites bureautiques comme Office aussi… Les jeux vidéo…

En 2018, j’ai contacté DUNOD pour leur proposer ce projet de livre car il n’existe que peu de livre sur le C++ Moderne, c’est-à-dire le C++ post C++11, date à laquelle sont apparues tout un ensemble de fonctionnalités comme les pointeurs intelligents, la déduction de type automatique (auto) et la suprématie de la bibliothèque standard STL avec ses strings, containers et algorithmes entre autres.

Beaucoup de livres C+ en français parlent de C++03 mais ne détaillent pas les fonctionnalités des derniers standards comme C++14 et C++17. Le nouveau standard C++20 arrive en Janvier 2020. Ce livre vous permet, par une approche par l’exemple, de connaitre toutes ses fonctionnalités.

En tant que professionnel du développement C++, je suis MVP Developer Technologies et j’ai accès au code source des derniers O.S. Windows. Pour vous donner une idée rapide, Microsoft a toujours fait ses O.S. et ses logiciels en C/C++. Pour Microsoft, le C++ c’est naturel, c’est comme l’électricité. Il n’y a pas de débat. On veut développer un produit, on le fait en C++. C’est avant tout une nécessité de peformance par défaut et de ce que les gens nomment « Power and Performance ». Le C++ ne fait aucun compromis la-dessus. Sans violer le NDA qui me lie à Microsoft, je peux vous dire que le code source de Windows 10 est truffé de C++ Moderne, des templates, d’utilisation de la STL et utilise toutes les fonctionnalités possibles de C++. Le code est propre, dense, orienté objet et comme dit Marian Luparu, Principal Group Manager de Visual C++, « Microsoft is committed to C++ ». Cela veut dire que Microsoft s’engage sur C++. Il ne faut pas oublier que son équipe et son produit, Visual C++ (MSVC),  le compilateur C++ de Microsoft, compile les produits comme Windows 10, Windows Server, Office, SQL Server entre autres donc Visual C++ est le joyau interne de Microsoft : c’est lui qui fabrique les logiciels phares de la société de Redmond. Chez Microsoft, chaque groupe produit fait du C++.

En 2011, Channel9 sortait une vidéo de Craig Symonds et Mohsen Agsen : C++ Renaissance[1]. Le C++ connaît actuellement une renaissance. Cela signifie que, par définition, le langage, les compilateurs et l’outillage de composition évoluent et on arrive à un état qui maximise l’efficacité, la productivité et la créativité des développeurs natifs dans tous les domaines matériels et logiciels (PC, appareils mobiles, systèmes d’exploitation, applications utilisateur, services, etc.). C++ est un langage de programmation « système » puissant, mais c’est plus que cela. C’est orienté objet, mais c’est plus que cela. Chez Microsoft, la plupart des produits phares sont écrits en C++ (et C, comme le noyau Windows…).

Dans le monde Linux, la suprémacie de C/C++ est sans comparaison. Comme dans Windows, le kernel et les drivers sont écrits en C et tout le reste en C++ sauf les couches historiques. Les applications phares comme Apache, MySQL, Redis pour ne citer qu’elles sont faites en C/C++. Il existe même une distribution Linux nommée Gentoo qui propose de construire son envrionnement Linux à partir des sources. Le système portage download un petit compilateur pour compiler GCC puis GCC compile tout : le noyau, les drivers, les couches de l’OS, bash & tools, X-Motif, Gnome, KDE, etc.

Je ne remercierais jamais assez Papy Jean-Marc de m’avoir fait découvrir le monde des ordinateurs quand j’étais tout jeune. Mon premier ordinateur était un Commodore C64 ou je découvrais les jeux vidéo. Puis nous avons eu un Amiga dans les années 80/90 et j’ai découvert AMOS Basic et je suis tombé dans la programmation. Je suis tombé par hasard sur les compilateurs Aztec C et Lattice C/C++ et ce fut mes débuts en C/C++. Puis, mon père a ramené de son travail un PC 286 SX25 avec Borland Turbo C et C++ pour MS-DOS. J’ai fait mes premières applications sous DOS puis pendant mes études, j’ai réalisé tous mes projets en Visual C++ sous Windows. A l’époque, nous sommes sous Windows 3.11 et Visual C++ 1.52c 16 bits. En 1993, Je fais un stage dans une entreprise qui fait un logiciel de 3D sous Windows NT et je découvre MSDN Library July 1994, la documentation des dévelopeurs Microsoft. Je tombe amoureux de cet environnement de Microsoft, des API Windows et du C++. Avec ma première paie je m’achète plein de livres Microsoft Press comme « Programming Windows », « Inside Visual C++ » et de livres sur C++. Le virus est implanté.

 

Christophe Pichaud,

Paris, France.

Samedi 23 novembre 2019 – 06:00 AM

[1] https://channel9.msdn.com/Shows/Going+Deep/Craig-Symonds-and-Mohsen-Agsen-C-Renaissance

Utilisation de ATL pour utiliser les API du Shell

La programmation Windows se fait souvent en COM. Pour ce faire on déclare des interfaces COM, des pointeurs IUnknown et on fait des QueryInterfacen AddRef, Release, etc.

Il existe un moyen plus cool de faire cela: les templates C++ ATL.

Voici deux fonctions: Remarquez la différence de style entre la première version COM et la version ATL COM :

 

Et voici la version ATL:

Le modèle de développement UI selon Microsoft

L’avenir de monde graphique (UI) chez Microsoft se nomme WinUI. WinUI ce sont les contrôles XAML de Windows 10. Ils sont faits en C++.

Windows 10 en fait une utilisation intensive et les propose (enfin) en accès complet à tout le monde: NET, C++, Win32.

Microsoft is committed to C++. Windows aussi. Microsoft fait ses logiciels en C++ car C++ est rapide et performant. Vous saisissez mon sous-entendu ? Sur le site Microsoft, si vous cherchez à faire du développement logiciel, on vous oriente sur .NET par défaut. Je pose la question : mais pourquoi ?

Microsoft ne le fait pas. Pourquoi le ferais-je ? Microsoft n’est plus dans le dog-fooding comme avant. Il y a un discours interne et un discours externe.

En interne, il n’y a aucun débat, on fait tout ou presque (à 90%) en C/C++. Windows, Office, Edge, etc.

En externe, on ne fait que la promotion de .NET, du web, de JS/TS, de Angular et de python !

Là ou je rigole, c’est que les évangélistes de Microsoft qui passent leur temps à prendre en photo leur repas de hamburgers sur twitter ne connaissent en rien le monde natif et là ça pose un problème par exemple, sur WinUI. Il n’y a plus personne pour expliquer le vrai Microsoft, celui de l’intérieur.

Sur WinUI, il faut faire la promotion de XAML Islands, des controles en C++ et savoir expliquer comment le mixer avec MFC et les contrôles Win32 par exemple. Résultat: rien. Y a personne qui sait faire.

En tant que MVP, je vais m’y consacrer. mais c’est pas normal que Microsoft ne remplisse pas sa part de Learning.

Des fois, j’ai des discussions avec des développeurs qui pensent que Windows est fait en C# ???? WTF! Le niveau de connaissance de l’entreprise Microsoft est nivelé par le bas. Les architectes .NET pensent que les interfaces graphiques desktop doivent être faites en WPF. Ah oui ? Pourquoi Microsoft ne le fait pas alors ?

L’avenir c’est C++ et .NET Core. Ce n’est pas que .NET et C#. NET et son CLR c’est powered by C++.