Top 10 des rapports C ++ Russie et liste de lecture de conférence en accès libre

Ce hub rassemble les dix meilleurs rapports de conférenciers tels que Nicolai Josuttis, Timur Doumler, Andrey Davydov et bien d'autres.


C ++ 17/20/23, concepts, structures de données immuables, concurrence, parallélisme, métaprogrammation - tous ces thèmes sont abordés lors de la conférence C ++ Russie 2019 qui s'est tenue ce printemps à Moscou. Plus de six cents participants, des conférenciers internationaux bien connus, des rapports détaillés. Veuillez noter - les rapports sont tels qu'ils seront obsolètes très bientôt, et vous pouvez appliquer les connaissances acquises même maintenant.



Le format est le suivant:


  • Vidéo YouTube obligatoire
  • Une description détaillée du rapport en russe (avec des diapositives, le cas échéant)
  • Brève biographie de l'orateur

N'hésitez pas à écrire des commentaires! Au fait, dans la playlist publiée sous la coupe, il n'y a pas que le top 10. Et nous avons désactivé les publicités sur YouTube, afin que personne n'interfère.


Tous les rapports vont de «junior» à «senior», mais les différences entre les places des dix premiers sont minimes et dépendent fortement de la méthodologie d'évaluation. En modifiant légèrement la méthodologie, vous pouvez considérablement changer de lieu. Alors regardez tout!


La playlist complète de la conférence est ici .


10. Le guide de l'auto-stoppeur pour des constructions plus rapides


Viktor Kirilov



Diapositives


C ++ est connu pour ses performances, sa vitesse, son absence de système de construction standard et de gestionnaire de packages, ainsi que la complexité et la durée de la compilation. L'impossibilité d'un développement itératif rapide est l'un des plus grands tueurs de la productivité des développeurs. Ce rapport est destiné à tous ceux qui souhaitent améliorer les trois derniers points: d'abord, quelques idées pour lesquelles la compilation et la liaison prennent autant de temps, puis une liste de techniques et d'outils pour résoudre le problème, par exemple:


  • réglage et infrastructure - matériel, systèmes d'assemblage, mise en cache, assemblages distribués, diagnostics des goulots d'étranglement, hygiène du code;
  • techniques - constructions d'unité, en-têtes précompilés, statique vs partagé;
  • changements dans les sources - idiome PIMPL, utilisation plus correcte des modèles, annotations;
  • modules - qu'est-ce que c'est lorsqu'ils apparaissent en C ++, ce qui s'avérera plus inutile à cause de cela.

À propos de Speaker


Six ans d'expérience professionnelle en C ++ dans les secteurs du jeu et des effets visuels. Maintenant, Victor développe l'open source et de temps en temps - le travail contractuel habituel. L'une des dernières tâches intéressantes est l'implémentation de code remplaçable à chaud dans le runtime Nim. Il est également l'auteur de doctest, "la bibliothèque de tests à en-tête unique la plus rapide et la plus puissante pour C ++". Il s'intéresse au développement de jeux et de moteurs de jeux, de code haute performance, de crypto-monnaies, à l'optimisation du flux de travail et à l'intégration de bonnes pratiques de développement, telles que l'analyse statique moderne et les outils d'instrumentation. Victor vit à Sofia (Bulgarie) et la programmation est à la fois sa profession et son hobby. Ayez votre propre site Web: http://onqtam.com/




9. Modèles et bases de données C ++


Sergey Fedorov



Diapositives


Lorsque nous travaillons avec des bases de données, nous obtenons souvent des tampons bruts, alors que nous voulons recevoir des données sous la forme de structures, de classes et de conteneurs C ++.


Une histoire sur la conception et l'implémentation du pilote PostgreSQL avec une interface humaine utilisant presque tous les outils de langage C ++ 17 actuellement disponibles.


L'approche décrite dans le rapport peut être adaptée à presque tous les protocoles de niveau application.


À propos de Speaker


Sergey Fedorov, l'un des principaux développeurs de Yandex.Taxi, développe un cadre asynchrone pour le backend Taxi. Un grand fan de métaprogrammation et open source.




8. Conception C ++ à déplacement uniquement


Ivan Čukić



RAII libère les ressources capturées. Mais il y a une ressource qui ne peut pas être retournée - c'est le moment.


L'une des erreurs les plus chronophages est la création de copies inutiles. La sémantique C ++ 11 Move a fait un pas dans la bonne direction. Il vous permet de donner des données inutiles à quelqu'un d'autre sans amende pour en créer une copie et sans risque de course selon les données lorsque les données ont de nombreux utilisateurs.


Dans cet exposé, nous prendrons part à une discussion sur une approche d'architecture qui ne permet que l'utilisation de types spéciaux, non copiables et déplaçables appelés types linéaires. Nous discuterons des fonctionnalités de C ++ qui nous permettront de forcer l'utilisation de tels types.


Pour cela, il est proposé d'utiliser des concepts de C ++ 20, && - fonctions qualifiées, etc.


À propos de Speaker


Ivan Chukich est l'auteur de Functional Programming in C ++, publié par Manning. Le contributeur KDE est l'un des plus grands projets open source open source. De plus, il enseigne les techniques de programmation modernes à l'université, transférant à ses étudiants ses 20 ans d'expérience en C ++. Il a étudié la programmation fonctionnelle en C ++ pendant et avant le post-doc, et a utilisé ces techniques dans des projets du monde réel.




7. Concurrence et parallélisme en C ++ 17 et C ++ 20/23


Rainer grimm



Qu'est-ce qui est commun entre les threads, les atomes, les mutex et les variables conditionnelles? Tous ces éléments sont les blocs de base pour la construction de toutes les applications multithread en C ++, et ils peuvent causer des problèmes même pour les développeurs C ++ expérimentés.


Cette situation a radicalement changé en C ++ 17, et plus encore en C ++ 20/23. À partir de C ++ 17, la plupart des algorithmes standard sont disponibles sous forme série, parallèle et vectorisée. Dans les dernières normes, nous attendons des exécuteurs et de la mémoire transactionnelle, nous pouvons nous attendre à de grandes améliorations dans les futures et les coroutines. Pour le multithreading et la concurrence, ce n'est que le début. Il est à espérer qu'à l'avenir, seuls (exécuteurs, mémoire transactionnelle, futurs, coroutines) seront utilisés dans les abstractions, et les threads, atomes, mutex et variables conditionnelles deviendront de simples détails d'implémentation.


Le but de ce rapport est de voir ce que nous avons déjà reçu en C ++ 17 et ce que nous pouvons espérer en C ++ 20/23.


À propos de Speaker


Rainer Grimm travaille en tant qu'architecte, chef d'équipe et instructeur depuis environ 20 ans. Dans ses temps libres, il aime écrire des articles sur C ++, Python et Haskell et parler lors de conférences, écrit souvent sur son blog «Modern C ++». Il anime actuellement des séminaires sur le C ++ moderne et Python. Ses livres C ++ 11 für Programmierer, C ++, C ++ Standardbibliothek et The C ++ Standard Library sont publiés par O'Reilly et Leanpub.




6. Métaprogrammation, compilateur doux


Andrey Davydov



Tout programmeur qui a plongé dans le monde du C ++ sait que les modèles sont complets, «l'échec de la substitution n'est pas une erreur» et au moment de la compilation, vous pouvez faire des choses incroyables et parfois même utiles. D'un autre côté, un développeur C ++ expérimenté comprend que «vous pouvez» ne signifie pas «vous avez besoin» et que vous devez payer pour l'abus de la métaprogrammation. L'une des principales contraintes est le temps de compilation, c'est pourquoi le rapport discute quelles opérations / techniques sont les plus coûteuses du point de vue du compilateur et comment les éviter.


En particulier, les problèmes suivants ont été mis en évidence:


  • pourquoi SFINAE est la dernière chose à utiliser;
  • pourquoi std :: conditional_t ​​est défini de manière inefficace;
  • quelle est la différence entre les implémentations de tuple dans Microsoft STL et libc ++;
  • quand utiliser std :: {conjonction, disjonction} et quand utiliser les expressions de repli;
  • pourquoi vous ne devriez pas utiliser std :: void_t;
  • comment les concepts apparaissant en C ++ 20 peuvent aider.

À propos de Speaker


Au cours des 3 dernières années, Andrey a travaillé dans l'équipe ReSharper C ++ chez JetBrains. Dans le passé, il était engagé dans la programmation industrielle dans des domaines liés aux SIG et aux systèmes de visualisation 3D.




5. C ++ essentiel


Anton Polukhin



Chaque nouveau langage de programmation s'efforce de déclarer qu'il est plus rapide, plus fiable et généralement à tous égards plusieurs fois meilleur que C ++.


Voyons voir - où est la vérité, et où est la fiction. Que la bataille commence entre C ++ et Asm / Rust / Go / Java / C # ...!


À propos de Speaker


Représentant de la Russie à l'ISO aux réunions internationales du groupe de travail sur la normalisation C ++. L'auteur de plusieurs propositions acceptées pour la norme de langage C ++.


Auteur des bibliothèques Boost TypeIndex, DLL, Stacktrace et mainteneur actif Any, Conversion, LexicalCast, Variant.


Il est l'auteur de Boost C ++ Application Development Cookbook and Second Edition.




4. Structures de données immuables postmodernes


Juan Pedro Bolívar Puente



L'élite C ++ parle de sémantique de valeur, d'immuabilité et de partage en communiquant depuis des années. Nous attendons un monde meilleur sans mutex, races, observateurs, schémas «d'équipe» et tout ce jazz. Quand il s'agit de pratiquer, il y a de gros problèmes. L'un des principaux problèmes concerne les structures de données.


Les structures de données immuables ne modifient pas les valeurs pour pouvoir les utiliser - vous devez créer de nouvelles valeurs. Les anciennes valeurs restent telles quelles et vous pouvez donc les utiliser à partir de plusieurs threads sans les bloquer. Cela nous donne une séparation structurelle des ressources, car les valeurs nouvelles et anciennes peuvent utiliser les mêmes données communes - elles peuvent être rapidement comparées et un historique très annulé stocké de manière très compacte. C'est pourquoi ils sont si agréables à utiliser dans les systèmes multi-threads et interactifs: ils simplifient l'architecture des logiciels de bureau et permettent aux serveurs de mieux évoluer. C'est l'ingrédient secret qui a déterminé le succès de Clojure et Scala, et même les développeurs JavaScript aiment l'utiliser avec quelque chose comme Immutable.js de Facebook.


Juan présente Immer, une bibliothèque C ++ qui implémente des structures de données modernes, efficaces et immuables.


Dans cet exposé, il a parlé des avantages architecturaux de l'immuabilité et a montré comment un vecteur persistant extrêmement efficace et puissant peut être construit au-dessus de structures de données modernes perfectionnées (Relaxed Radix Balanced Trees). Nous avons examiné un exemple de programme - un éditeur de texte conçu dans un tel style architectural. Le code n'est pas seulement super simple, il a également surpassé la plupart des programmes similaires en termes de performances. Ne croyez pas? Ouvrez le rapport et voyez par vous-même!


Technologies utilisées:



À propos de Speaker


Juan est un consultant et ingénieur indépendant de Berlin spécialisé dans la conception axée sur la valeur, les logiciels interactifs, le C ++ moderne, la programmation fonctionnelle et l'utilisation stratégique de l'open source. Auparavant, il a travaillé à Ableton et a participé à divers projets liés à la musique. Il a également participé au projet GNU et co-fondé Hacklab à Grenade.




3. Concepts: simplifier l'implémentation des classes d'utilité std


Andrey Davydov



Les concepts apparaissant en C ++ 20 sont un sujet long et largement discuté. Malgré l'excès de matériel accumulé au fil des ans (y compris les discours d'experts de classe mondiale), il existe toujours une confusion parmi les programmeurs appliqués (qui ne s'endorment pas quotidiennement avec la norme) ce que sont les concepts C ++ 20 et sont-ils nous avons besoin s'il y a enable_if vérifié au fil des ans. En partie, la faute est de savoir comment les concepts ont évolué sur ~ 15 ans (Concepts Full + Concept Map -> Concepts Lite), et en partie parce que les concepts se sont révélés ne pas ressembler à des outils similaires dans d'autres langages (limites génériques Java / C #, traits de rouille, ... )


Le rapport commencera par un bref aperçu des innovations liées au concept de C ++ 20, après quoi nous examinerons la mise en œuvre de certaines classes et fonctions de STL, en comparant les solutions C ++ 17 et C ++ 20. Par exemple:


  • pour implémenter std :: optional maintenant vous devez utiliser la hiérarchie d'héritage de profondeur 7, en C ++ 20 ce ne sera pas nécessaire;
  • pour le constructeur par défaut std :: pair nécessite désormais 2 fonctions de modèle, en C ++ 20 - 1 non-modèle;
  • souvent, les classes de modèles se spécialisent partiellement, dans le cas où les paramètres de modèle ont des propriétés spéciales, il est plus pratique et plus correct de le faire avec des concepts.

Le public est censé avoir une idée générale de ce que sont les concepts et SFINAE. Une connaissance de la bibliothèque C ++ standard sera également utile; la connaissance des subtilités et des détails d'implémentation n'est pas requise.


À propos de Speaker


Au cours des 3 dernières années, Andrey a travaillé dans l'équipe ReSharper C ++ chez JetBrains. Dans le passé, il était engagé dans la programmation industrielle dans des domaines liés aux SIG et aux systèmes de visualisation 3D.




2. Initialisation en C ++ moderne


Timur Doumler



Il est bien connu que la sémantique d'initialisation est l'une des parties les plus complexes du C ++. Il existe de nombreux types d'initialisation, décrits par différentes syntaxes, et ils interagissent tous de manière complexe et difficile. C ++ 11 a apporté le concept de "l'initialisation universelle". Malheureusement, elle a introduit des règles encore plus complexes, et à leur tour, elles ont été bloquées en C ++ 14, C ++ 17 et modifiées à nouveau en C ++ 20.


Dans ce rapport, Timur a d'abord résumé les résultats historiques de l'évolution de l'initialisation en C ++. Il a donné un aperçu systématique de la version actuelle de la règle d'initialisation, des problèmes typiques et des surprises. Introduit des règles pratiques sur la façon d'utiliser efficacement toutes ces règles. Et enfin, Timur a parlé des dernières propositions de la norme, ce qui peut rendre la sémantique de l'initialisation C ++ 20 un peu plus pratique.


À propos de Speaker


Timur est un développeur C ++ spécialisé dans le son et la musique, membre du comité ISO C ++, directeur de programme de l'Audio Developer Conference (ADC). Il s'efforce d'écrire du code propre, de développer de bons outils, de promouvoir l'évolution du langage C ++ et de construire des communautés inclusives.




1. C ++ 17 - les plus gros pièges


Nicolai josuttis



C ++ 17 est une énorme combinaison de petites nouvelles fonctionnalités, à la fois dans le langage et dans la bibliothèque. Ces capacités vous permettent non seulement de faire plus de nouvelles choses, mais offrent également de nouvelles façons de tirer dans les jambes - beaucoup plus souvent que prévu. Ce n'est pas une théorie. Cela se passe dans la vraie vie, ici et maintenant.


Dans ce rapport, Nikolai a trié tous ces pièges, a discuté des raisons de leurs idées et de leur architecture et a donné des instructions sur la façon de contourner les problèmes. En tant qu'effet secondaire, vous pouvez approfondir les nouvelles fonctionnalités de C ++ 17.


À propos de Speaker


Nikolay est architecte de systèmes indépendant, responsable technique, auteur et consultant. Il développe des systèmes logiciels de moyenne et grande taille pour les télécommunications, la finance et la fabrication.


Il est largement connu dans la communauté pour ses rapports et le fait qu'il écrit des livres sur C ++ ( The C ++ Standard Library and C ++ Templates ), parle des nouvelles fonctionnalités du langage.


Depuis 20 ans, il est membre actif du comité de normalisation C ++.




Une playlist complète avec tous les rapports est disponible ici . Nous vous rappelons que le nouveau C ++ Russia est déjà en route et se tiendra du 31 octobre au 1er novembre 2019 à Saint-Pétersbourg. Les billets peuvent être achetés sur le site officiel .

Source: https://habr.com/ru/post/fr462939/


All Articles