Aide-Mémoire C#/NET – les Notes de l’Auteur

“C# is a cornerstone of Microsoft’s new .NET platform. Inheriting many features from both Java and C++, C# is destined to become the high-level programming language of choice for building high-performance Windows and Web applications and components–from XML based Web services to middle-tier business objects and system-level applications[1].” [PM2] 

Stanley B. Lippman[2], 2001

C# est un langage moderne, élégant, productif, orienté objet qui permet de faire des applications mobiles, du web, du Desktop, du cloud, du gaming, de l’IoT et de l’IA.

J’ai assisté en 2001 à San Francisco à la conférence Conference.NET organisée par Developmentor durant laquelle les équipes de Microsoft présentaient C# et NET Framework. C’était COM 3.0. À l’époque, on développait en Visual Basic 6 et en Visual C++ et Microsoft nous présentait le futur du développement selon Microsoft. On sentait qu’il y avait un truc spécial. Le monde allait changer. C’était génial. Je suis reparti au bout d’une semaine avec mon Visual Studio NET BETA et le NET Framework SDK BETA2 DVD en poche avec le MSDN Magazine. À l’époque, je travaillais à la Société Générale et je présente le truc. On faisait du C++, des composants COM avec ATL/COM, des UI avec les MFC et de la communication client/server avec des sokets, des Named Pipes, du MQ Series et du Tuxedo. J’explique à mes collègues que .NET c’est l’avenir et qu’il va falloir s’y mettre. Je reste à la SG faire du C++ pendant quelques années et en 2005 je rentre chez Avanade où on ne fait que du .NET. C’était hallucinant : on faisait des SI entiers en .NET avec des Web Services, des sites Web ASP.NET et on utilisait Enterprise Library car Avanade avait une librairie ACA.NET pour le développement dédié aux entreprises. Chez Avanade, joint-venture Microsoft/Accenture, on avait un accès direct aux ressources Microsoft et on avait plein de documents confidentiels (NDA[3]) et des slides de conférences. C’était l’âge d’or de .NET. À l’époque, Visual Studio 2005 était d’une rapidité phénoménale. On faisait des interfaces graphiques de bureau avec WinForms, des applications Web avec ASP.NET WebForms et des Web Services ASMX. On se connectait à SQL Server ou Oracle avec ADO.NET et on faisait du Reporting avec Crystal Report qui était livré avec Visual Studio. Avec Avanade, on a fait des applications de folie pour tout le CAC40. Avec Enterprise Library et ACA.NET, on avait une longueur d’avance et on développait beaucoup en réutilisant les briques. En 2006, Vista est sorti et ce fut le traumatisme Longhorn[4]. Vista devait contenir beaucoup de .NET à l’intérieur de Windows. C’était le projet WinFX. WinFX[PM3] , c’était Avallon (WPF), Indigo (Windows Communication Foundation) et WWF (Windows Workflow Foundation), un système de fichiers entièrement objet nommé WinFS mais… la guerre entre la Windows Division qui fait Windows et la Developer Division qui fait NET a eu raison du projet. WinDiv reprochait à .NET un manque de fiabilité, de rapidité et de robustesse. Ils ont envoyé une liste des requêtes pour .NET et DevDiv n’a jamais pu y répondre et donc WinDiv les a ignorés et a stoppé le projet. Windows a été entièrement fait en C++ sans .NET à l’intérieur. Sachez avant de clore cette parenthèse que la guerre existe toujours et que Windows est toujours exclusivement fait en C++. En parallèle des turpitudes de chez Microsoft à Redmond, WA, USA, j’ai continué à faire des gros projets .NET pour les grands comptes. J’ai participé à un énorme projet mondial Exchange avec Microsoft Corp pour Orange. .NET était utilisé pour le provisioning des serveurs Windows et Exchange. Dans les années 2010, les entreprises migrent massivement leur code Visual Basic et C++ en NET C# ou NET VB.NET. Les annonces d’emplois pleuvent et les salaires de développeur .NET sont attractifs. En 2011, je fais la connaissance de François Merand, qui a passé 10 ans chez Microsoft à l’architecture et il fonde les « NET Rangers by Sogeti ». Je signe chez lui pour faire du consulting .NET avec une dizaine d’individus dont Keelan CLECH à Lyon, des ex-Winwise comme Jason De Oliveira, Loic BAUMANN, Guillaume Rouchon et Vincent LABATUT à Paris. Nous sommes des Experts Cloud, NET et ALM. C’est le début de Azure et ALM, c’est la gestion du cycle de vie des applications (on appelle ça le DevOps maintenant) avec TFS. Pendant 6 ans, sous la responsabilité de Namic AIT-MEDDOUR, j’ai eu un job de rêve. On était des experts communicants ; on faisait des articles, du blog, des conférences, des vidéos, des missions, des events Microsoft comme les TechDays, on était connu sur la place. Le centre de Services NET de Keelan à Lyon était en plein boom. Et en 2017, après un an à avoir développé une application GUI multithreads pour des traders, je suis débauché par Microsoft pour mes compétences C++ ; je ne peux refuser. Je fais C++ et NET. Cependant, quelques mois plus tard, et ce sans avoir démérité, bien au contraire, je suis mis dans la charrette d’une réorganisation mondiale. Microsoft supprime 5 000 emplois dans le monde. Tant pis. En parallèle, François est remercié de Sogeti et les Rangers s’arrêtent. J’ai continué les Rangers en association libre. Après un bref passage chez Devoteam Modern Applications, je rejoins le groupe Econocom et la société Infeeny sous la responsabilité de Michel Hubert et Frédéric Gruaz. Je fais beaucoup de Marketing autour de NET et Azure, des offres commerciales, du blogging, des articles techniques, des white papers, de la formation et aussi un peu de consulting.

Moi qui suis un fan de C++, je dois reconnaître que quand je fais du C# / NET, tout est trop simple. Une classe, un fichier, un document XML ou JSON, une page Web, un serveur Web API, une connexion SQL Server, tout est simple. Avec NET, celui qui veut faire une application peut le faire avec une productivité inégalée. Une interface graphique en WinForms c’est aussi rapide qu’en VB6. On pose les contrôles Windows, on gère les événements et c’est fini. Pour sérialiser une classe, j’ajoute un attribut au-dessus de la classe et c’est terminé, c’est automatisé. Quand je vois les efforts qu’il me faut faire en C++ pour avoir une application de sérialisation multiplateforme la STL et le support XML avec Boost, c’est l’enfer. De plus, il existe des librairies tierces qui permettent de fournir des contrôles pour que les applications soient magnifiques en UI. Par exemple :

  • Telerik 
  • SyncFusion (mon produit préféré) 
  • DevExpress

Bref, faire une application .NET avec C#, c’est simple, ludique, rapide et ça marche plutôt rapidement. Le moteur JIT est fourni par le backend de Visual C++. On a donc une rapidité de folie. Soyons honnête, le code C# NET s’exécute forcément moins rapidement que C++ qui génère de l’assembleur ×64 optimisé mais le résultat est bluffant si l’on considère la productivité accrue de l’environnement. Il est vrai que les applications de communications boîtes noires seront toujours faites en C++ ou en Go, mais les Web API que l’on développe dans les systèmes Azure Kubernetes sont faites en C# NET Core sous Linux.

NET Core est multiplateforme. Il fonctionne sous Windows, Linux et Mac.

La technologies .NET est passionnante à explorer car elle est le fruit du combat entre Microsoft et Sun. Sun a sorti Java et Microsoft a essayé de faire des extensions à java via Visual J++. Microsoft a écopé d’un procès et s’est rétracté. C# et NET étaintt nés. .NET, c’est le Java de Microsoft. Microsoft ne veut pas le reconnaître mais c’est la même architecture : un Framework avec une Base Class Library, un byte code (le MSIL), une machine virtuelle d’exécution et un moteur JIT d’émission de code. L’avantage de .NET et C#, c’est que Microsoft possède toute la stack alors que Java est maintenant la propriété de Oracle et que le modèle Open-Source et les conflits entre Oracle et Google ne présument pas de bonnes choses pour Java en libre. Les entreprises qui font du Java sont obligées de souscrire un contrat de support à Oracle pour faire des applications d’entreprises et ce n’est pas donné ! Cependant, il existe des implémentations libres du JDK qui permettent de s’affranchir de Oracle comme OpenJDK ou Azul.

Un DSI qui veut faire une application ou un SI avec une technologie a le choix entre NET et Java. Microsoft ou Oracle/Google. Les deux stratégies sont payantes.

L’avenir c’est NET Core.

Christophe Pichaud (christophep@cpixxi.com),

Paris, France. Mardi 14 Juillet 2020


[1] C # est la pierre angulaire de la nouvelle plate-forme .NET de Microsoft. Héritant de nombreuses fonctionnalités de Java et C ++, C # est destiné à devenir le langage de programmation de haut niveau de choix pour la création d’applications et de composants Windows et Web hautes performances – des services Web XML aux objets métier de niveau intermédiaire et au niveau des applications système.

[2] Stanley B. Lippman a fait l’implémentation du premier compilateur C++ chez Bell Laboratories avec Bjarne ’La même année, il travaille chez Microsoft comme architecte dans l’équipe Visual C++.

[3] Non Disclosure Agreement : accord de confidentialité.

[4] https://arstechnica.com/information-technology/2011/06/windows-8-for-software-developers-the-longhorn-dream-reborn/.


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