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++.

Présentation de mon profil

Je m’appelle Christophe Pichaud, 45 ans, je suis divorcé et j’ai trois filles. Je suis Architecte de Solutions Microsoft et développeur. Je travaille dans le milieu de l’écosystème Microsoft depuis 20 ans, suis certifié sur Windows, C++, C#/NET et SQL Server. Je suis aussi Microsoft MVP depuis deux ans dans la catégorie Developer Technologies. J’ai une passion aussi pour le C++ mais je vous présente plus particulier mes compétences en C#/NET Framework.

Je vais vous présenter trois missions .NET complexes :

La première : Pour Microsoft, en solo. Il s’agit d’un projet CIR vitrine pour Microsoft que j’ai réalisé en 2018 pour un Microsoft Gold Partner à Paris. Il s’agit de mettre à disposition un container Docker sur le Market Place Azure pour gérer un cache distribué implémenté avec OpenLDAP-LMDB pour les applications sur Azure. Le but étant de concurrencer les solutions comme DocumentDB de Microsoft ou MongoDB qui sont assez cher sur Azure. Le projet a été réalisé en 8 mois et met en œuvre un container docker qui embarque un serveur web autonome et une librairie d’accès aux données (c’est un filesystem en mémoire) extrêmement rapide. Ce projet met en œuvre les technologies Azure Container Instance et Azure Container Registry. Les performances du service REST sont 10x supérieurs à MongoDB et DocumentDB pour un coût inférieur. La solution a été appréciée par Microsoft.

La seconde : Pour le CACIB, en 2010, en équipe, il s’agit d’un projet bancaire CIB de consolidation des flux Front-Back avec une solution financière IntelliMatch. Le but est de traiter la nuit les flux du FrontOffice et de les agréger finement pour qu’ils puissent être consolidés. Il s’agit de services de traitement fonctionnant sous forme de Windows Workflow qui s’exécutent en parallèle avec d’autres opérations multithreads.  J’ai participé à la finalisation de cette solution et résolu les problèmes de multithreading (plantages aléatoires). J’ai développé un outil graphique de monitoring en WinForms qui permet de suivre le chemin du workflow de traitement pour que les équipe de support puissent analyser les travaux réalisés la nuit. Cette gestion du support a été très bénéfique.

La troisième : Pour CPORDevises en développement solo avec un CP en 2016, Il ‘agit du développement d’une application graphique pour des traders d’Or. Le but était de faire de l’acquisition de données dans des grilles et de permettre la saisie en parallèle sans bloquer l’interface utilisateur. Il s’agit d’opérations qui mêlent les mécanismes de Timer et de multithreading. L’application MDI permet d’afficher des grands écrans complexes qui sont mise à jour plusieurs fois par secondes via des appels de WS en arrière plans. La solution vient d’un mécanisme de récupération de données en mémoire et d’un affichage en asynchrone. Ce n’est pas du binding car c’est trop lent. WinForms était la solution car le GDI est plus puissant que WPF.

Je pratique C#/Net depuis 2001 et possède les certifications MCSD.NET, MCTS. Je maitrise une bonne partie de la stack .NET que j’ai mis en œuvre en entreprises mais les technologies Microsoft ne cessent de grossir et il faut s’adapter. C’est ma principale qualité. J’aime travailler en équipe sur des solutions complexes. Je suis prêt à relever de nombreux défis et je suis très motivé.

En 2012, pour Sogeti,  j’ai aussi réalisé une mission de 24 mois à la Banque de France dans un service Architecture. Une belle mission.

En 25 ans, j’ai eu la chance de mettre en œuvre en entreprises la plupart des technologies Microsoft : Win32, COM, MFC, SQL Server, IIS, HIS, Exchange, AD, VBS, WInForms, WPF, AP.NET & MVC, Azure.

Je ne connais pas tout, ce n’est pas possible. Par contre, je lis beaucoup. Je m’adapte. Je me remets en cause : c’est obligatoire. Je rip pleins de ebooks.

Mon domaine, c’est le monde Microsoft. Via le channel MVP, j’ai les informations confidentielles avant tout le monde.

Je me forme régulièrement sur Pluralsight. Je suis un Expert technique sur Windows, C++ et NET.

Je suis aussi contributeur open-source officiel sur le code source Windows via Windows/Terminal depuis Juin 2019. Fier.

Mon dada, c’est le C++ mais je suis passé à NET en 2001 avec le NET SDK Betas 2. J’ai assisté à la conférence NET de Develop Mentor qui invitait les développeurs Microsoft à présenter le CLR, la BCL et C# à San Francisco en 2001.

J’ai compris que c’était l’avenir.

Je suis aussi contributeur régulier au magazine Programmez et Community Manager de la communauté de NET Azure Rangers (27 membres, 9 MVP).

Si vous pensez que je peux vous être utile, de par mon expérience d’Architecte logiciels et de développeur expérimenté, n’hésitez pas à me contacter.

Je me ferais une joie de répondre à une interview par fil, skype ou de visu.

Christophe Pichaud – MVP Developer Technologies | www.netazurerangers.com | christophep@cpixxi.com | @windowscpp | windowscpp.com | christophep.com