MARGO

Actualité

CPPP 2019 : retour sur la conférence dédiée au développement C++

Zoom sur les talks marquants de la première édition de la CPPP

Par Damien Cojan Software Engineer C++

17/06/2019

Le 15 juin 2019 a eu lieu la première édition de CPPP, une journée entière de conférences internationales axées sur le langage de développement C++. Retour sur une sélection de talks dont l’objectif commun était de faire progresser les développeurs débutants comme confirmés en C++. 

 

CPPP C++ programme

 

1 – Emotional Code – Kate Gregory

 

Derrière ce titre qui semble inviter au sentimentalisme se cache en réalité une réflexion très pertinente à propos de l’impact de notre état mental sur le code que nous produisons. 

Insécurité, arrogance, colère, égoïsme, paresse, désinvestissement, stress, sont autant de mots clés qui mènent à du code obscure, peu documenté, peu voire pas testé, réinventant la roue, contenant des commentaires dirigés contre d’autres développeurs, … Cette liste est non-exhaustive.

Kate Gregory met ainsi en avant, exemples à l’appui, que nos émotions impactent notre production et que la première étape pour en limiter les conséquences est d’en prendre conscience.en est la prise de conscience.

La seconde étape est de cultiver un état d’esprit plus positif – empathie, générosité, confiance, bienveillance – et d’en faire bénéficier le code en faisant évidemment tout le contraire de ce qui est listé au paragraphe précédent. Mais pas uniquement. Le cadre social est une autre des cibles puisque l’idée est également d’apprendre à détecter les comportements toxiques, y compris chez soi-même.

De nombreuses questions et remarques ont suivi, relatant souvent d’expériences personnelles, et démontrant que le sujet avait touché une zone sensible dans l’audience.

Nous avons beau apprendre les meilleures pratiques et techniques du monde pour être les plus performants, seuls, devant nos écrans, au final nous travaillons dans un cadre qui implique énormément de partage de code.

Qu’il s’agisse de reprendre ou de léguer du code, de débugger du code qui ne nous appartient pas ou que d’autres corrigent le nôtre, de développer des librairies internes qui seront utilisées par d’autres équipes, de mettre son code à disposition du monde entier, la qualité du code ne se résumera pas seulement aux performances et à l’ingéniosité de celui-ci mais aussi au sentiment qu’il laisse à la lecture et à l’utilisation.

 

« There is no neutral code. »
(Il n’y a pas de code neutre.)

 

 

2 – Améliorez votre C++ avec les algorithmes de la STL –  Mathieu Ropert

 

Mathieu Ropert travaille actuellement chez Paradox Interactive. Son parcours est varié et son blog mérite un détour.

Le C++ ne nous habitue pas nécessairement à avoir le même réflexe qu’en Python, de chercher la librairie à ‘importer’ et qui résoudra la problématique. Nous aurions au contraire même parfois tendance à réinventer la roue. Pourtant le langage dispose dans sa librairie standard d’une bonne collection d’algorithmes. 

Après un rappel des différents concepts autour des itérateurs, démarre une présentation illustrée d’algorithmes disponibles dans le header éponyme. Tous ? Non. Il y en a un bon nombre. Le conférencier invite d’ailleurs à visionner la performance de Jonathan Boccara qui présente les 105 algorithmes dont dispose la STL jusqu’au C++17. Ici l’objectif est d’éveiller l’intérêt et d’apporter quelques subtilités. Le ‘pointeur sur la fin’ se nomme une ‘sentinelle’, std::remove n’efface rien, zoom sur std::not1, std::lower_bound, std::rotate,  std::stable_partition, pour ne citer que ceux-la. La séance s’est terminée sur une présentation rapide du chaînage des algorithmes sur les ranges en C++20.

 

3 – Adding a new clang-tidy check by the practice – Jeremy Demeule

 

Jeremy Demeule est ingénieur logiciel chez Murex – https://twitter.com/jeremydemeule

Dans cette conférence, il a abordé l’utilisation de Clang-tidy, un analyseur de code statique, utilisé notamment pour moderniser du code. Clang-tidy est basé sur clang et propose une énorme liste de vérifications ainsi que la possibilité de remplacer du code.

La présentation allait cependant plus loin en proposant de coder en direct une nouvelle vérification de A à Z. Comprendre le code d’origine, comprendre le code cible, créer le ‘matcher’ avec clang-query et enfin créer le ‘fix’ avec clang-tidy.

 

4 – Merci le compilo – Serge Guelton

 

Serge Guelton travaille sur LLVM pour RedHat.

En guise d’introduction, il nous rappelle que ce qui garantie la rapidité du C++, ce n’est pas le Standard mais le compilateur. Effectivement, si on ne devait donner qu’un exemple, il n’y a qu’à partir du C++17 que le Standard édicte qu’une élision de copie doit avoir lieu lorsqu’un nouvel objet est retourné directement par une fonction. Cependant, g++ n’a pas attendu cette version et optimise ‘naturellement’ les constructions et copies d’objets, même avec l’option -O0. Il faut explicitement lui donner l’option -fno-elide-constructors pour qu’il ne le fasse pas.

Ainsi, le compilateur fait bien plus qu’obéir au standard en intervenant grandement et souvent sans nous le demander dans les performances des applications.

Il est donc tentant de se concentrer sur la maîtrise du langage et de confier au compilateur l’optimisation ‘générale’ avec -O2, -O3. Cependant, plus les contraintes techniques imposées sont fortes, plus il est important de ne rien laisser à la «magie».

Serge Guelton entame ainsi la description d’une petite sélection parmi deux milles et quelques flags de compilation d’llvm, avec comme fil rouge ces compromis auxquels nous devons parfois faire face. Sans surprise il y a presque systématiquement la performance d’un coté de la balance alors que de l’autre se trouve la taille du programme (-g3), la précision mathématique (-ffast-math), la portabilité (-march=native) ou encore la sécurité (-fsanitize=address). 

Nous avons également eu un aperçu, entre autre, de la PGO (Profil Guided Optimization), qui consiste à faire tourner le programme sur des cas représentatifs puis à le recompiler à l’aide de ce profilage ainsi que la LTO (Link Time Optimization), qui intervient sur les temps de compilations, les seuils d’inlining, les seuils de déroulement de boucle ou encore la simplification des vtables.

 

5 – Élégance, style épuré et classe – Loic Joly


L’observation de base se situe au niveau des règles de générations par le compilateur des constructeurs et opérateurs d’assignation, appelées ici les ‘fonctions spéciales‘.

En décidant de créer une classe, on se confronte dès le début à ces questions d’ordre technique. Qu’est-ce que je définis ? Qu’est-ce que je préviens ? Qu’est-ce que je délègue au compilateur ?

Une solution simple est de décider de n’en définir aucune (règle du zéro), et d’être ainsi certain de laisser complètement le contrôle au compilateur, ou de les définir toutes (règle des cinq). Mais est-ce si simple ?

 

Loic Joly nous a proposé une vision liant cette problématique avec des rôles prédéfinis que l’on peut associer aux classes.

  • Les classes vides : Sans état et sans donnée membre, telles que les classes de traits, ou de policies. Ici, nul besoin de définir quoi que ce soit.
  • Les agglomérats : Des données groupées, publiques, sans comportement. Ici, nul besoin de définir quoi que ce soit également, sinon un constructeur.
  • Les classes à sémantique de valeur : Par exemple une chaîne de caractère ou une date. Ce sont des abstractions qui permettent de réfléchir simplement et à ce titre, nombre de ces classes existent dans le langage et la STL. Ces classes sont à minima copiables et constructibles par défaut.
  • Les classes à sémantique de référence : Elles contiennent de la donnée allouée ailleurs et sont sujettes aux références ‘pendouillantes’ et donc dangereuses.
  • Les classes d’une hiérarchie polymorphe : Elles dépendent des fonctions spéciales définis par la classe de base.
  • Les classes de mécanisme : L’action y est plus importante que la valeur. Ces classes sont par exemple cout ou socket. Ici les fonctions spéciales sont plus complexes. Ces classes ont souvent de la ressource à gérer (RAII) et s’il fait rarement sens de les copier, il est envisageable de les déplacer. Devoir écrire de telles classes est cependant rare.

 

Il est intéressant de comprendre que choisir un rôle clair lors de la définition d’une classe peut être un soutien lorsqu’il s’agit d’en implanter.

 

En conclusion

 

Avec ses sujets variés, l’énergie des organisateurs et le soin apporté au confort de l’audience, cette première édition de CPPP est un nouveau moteur bienvenu d’échanges de savoir, d’idées, de sujets de réflexions, d’invitations à coder mieux et surtout à devenir de meilleures personnes. Le bilan laisse très enthousiaste pour la prochaine édition.

CPPP C++ conference 2019

 

Source photo : La Fille d’à Côté via Twitter 


Par Damien Cojan Software Engineer C++
Développement

Actualité

Margo partenaire du challenge web social et solidaire organisé par Colombbus

Margo a le plaisir d'accueillir le Le Challenge Web Social et Solidaire organisé par l'association Colombbus. 2 jours intensifs de Hackathon pour ses salariés en insertion qui mettront leurs compétences au service des associations, coopératives, entreprises sociales...

28/10/2019 Découvrir 
Actualité

Rencontre avec Dipty Chander dans le cadre du Margo Women Network

Pour moi l’important c’est de ne pas se poser des questions sur son origine ou ses moyens. Il faut toujours essayer, et quand on essaye vraiment on obtient ce qu’on veut.

Découvrir 
Actualité

Quels challenges pour un développeur en Finance de Marché ?

Le quotidien d’un développeur dans le secteur de la finance de marché peut considérablement varier d’un département à l’autre. Sirine Kanoun, Software Engineer chez Margo, travaille actuellement au sein de la BNP, dans l’équipe IT Comptabilité / Finance. Sirine est en charge d’assurer la maintenance des applications existantes et de mettre en place de nouvelles fonctionnalités demandées par les utilisateurs issus du métier. Elle travaille ainsi en étroite relation avec les équipes comptables, ce qui apporte à sa mission une coloration bien particulière, liée à la fois au secteur d’activité et au coeur de métier de son équipe. Elle revient pour nous sur les quatre défis qu’elle adresse au quotidien et qui rendent son projet riche et challengeant.

Découvrir 
Communiqué de presse

Margo organise son premier Hackathon Tech For Good en partenariat avec Latitudes et makesense

Margo, société de conseil spécialisée dans la transformation digitale des entreprises, s’associe à Latitudes et makesense, deux associations qui travaillent sur l’engagement citoyen au service de la résolution d’enjeux de société, afin d’organiser son tout premier Hackathon Tech For Good, le weekend du 15 et 16 février 2019.

15/01/2019 Découvrir 
Actualité

Tous les mutants doivent mourir...

Taher Seifeddine Jegham, Consultant chez Margo, nous livre son retour sur la conférence “Unit testing implementation on Legacy code” de l’’Agile Testing Night.

02/10/2018 Découvrir 
Actualité

Margo partenaire de la Battle Dev

Margo donne rendez-vous à ses consultants, mais aussi à tous les développeurs prêts à relever un nouveau challenge, le mardi 27 mars prochain pour la Battle Dev.

22/03/2018 Découvrir