Top 10 des documents de conférence C ++ CoreHard automne 2019



CoreHard est une conférence C ++ tenue à Minsk deux fois par an, au printemps et en automne. Depuis 2015, nous sommes passés d'une petite communauté de passionnés à une grande conférence régionale. Nous essayons de combiner les connaissances de maîtres reconnus du monde C ++ avec le développement du mouvement local C ++, en attirant activement des intervenants d'entreprises locales biélorusses, russes et ukrainiennes.

Nous sommes pressés de partager avec les résidents de Khabrovsk les 10 meilleures vidéos fraîchement préparées de notre conférence récemment bruyante .

Alors, allons-y: les 10 meilleurs rapports évalués par les téléspectateurs.

10. Modèle de mémoire exceptionnel - Alexey Tkachenko


Le concept de mémoire dans un ordinateur va bien au-delà de la portée d'un ensemble de puces de mémoire dynamique «de fer» installées dans un ordinateur. La mémoire a longtemps été perçue comme un espace adressable, qui est géré par le module de gestion de la mémoire - MMU. Cette approche nous permet de distinguer la mémoire physique de la mémoire virtuelle, qui est activement utilisée dans tous les systèmes d'exploitation qui utilisent le concept de processus comme unité de gestion des ressources.

Dans le rapport, nous parlerons de certaines applications inhabituelles des méthodes de protection mises en œuvre dans la MMU, à savoir les moyens de simuler l'interaction du matériel avec le processeur central via des fichiers de registre.

Le rapport couvrira les systèmes d'exploitation Windows et Linux et diverses architectures.
Le rapport intéressera principalement les développeurs de logiciels embarqués (embarqués), mais les techniques décrites dans le rapport seront utiles aux développeurs de "gros" ordinateurs.


À propos de Speaker

Depuis plus de 12 ans, Alexey Tkachenko développe des logiciels pour les tests matériels-logiciels et des complexes de bancs de produits de technologie spatiale dans la société Peleng. Outils de travail de base: C ++ pour les tâches de bas niveau et interaction avec le matériel et C # /. NET pour le logiciel client. Dans ses temps libres, il aime Embedded sur de modestes microcontrôleurs.



9. C ++ Taxi Tricks - Anton Polukhin


Lors de l'écriture de grands cadres, il faut faire face à des tâches typiques pour lesquelles des solutions sont connues depuis longtemps. Cependant, ces solutions ne sont pas assez efficaces et beaucoup mieux peut être fait.

Dans le rapport, nous parlerons du pimpl compatible avec le cache, de l'optimisation de la journalisation des types d'utilisateurs, de la conversion de JSON / XML / YAML en types d'utilisateurs et d'autres techniques intéressantes.


À propos de Speaker

Anton Polukhin est le représentant de la Russie auprès de 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 ++. L'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.



8. C ++ 20: Les petites choses - Timur Doumler


C ++ 20 apporte de nouvelles fonctionnalités intéressantes au langage: modules, coroutines, concepts, opérateur de vaisseau spatial et de nombreuses nouvelles bibliothèques. Cependant, en plus, C ++ 20 ajoute également de nombreuses petites améliorations, rendant C ++ plus puissant et expressif, tout en étant plus sécurisé et holistique.

Dans ce rapport, nous examinerons de petites améliorations dans le cœur du langage qui peuvent faciliter la vie du programmeur: expressions lambda, CTAD, liaisons structurées, initialisation et bien plus encore.


À propos de Speaker

Timur Doumler est un développeur C ++ spécialisé dans les technologies de traitement et de synthèse du son, un membre actif du comité de normalisation ISO C ++ et un activiste de la communauté #include <C ++>.



7. Viser une latence ultime - Mateusz Pusz


Dans ce rapport, nous examinons le monde C ++ à travers le domaine à faible latence. C'est un monde dans lequel les allocations de mémoire dynamique et les exceptions ne sont pas les bienvenues, où nous n'avons peut-être pas assez de conteneurs STL et où les développeurs sont souvent obligés de descendre au niveau assembleur pour s'assurer que le code fait vraiment exactement ce qui est nécessaire de la manière optimale.


À propos de Speaker

Mateusz Pusz est architecte, ingénieur et spécialiste de la sécurité, consultant, enseignant et évangéliste du C ++ moderne. Membre des groupes de travail WG21 et SG14 du Comité de normalisation C ++.



6. Windbg: quand on ne joue pas - Alexander Golovach


Dans la pratique de la programmation, des problèmes surviennent souvent qui ne peuvent pas être reproduits et étudiés du côté du développeur. Dans de telles situations, il est parfois impossible même d'organiser l'accès à distance à la machine. Le rapport discutera et donnera des conseils sur le débogage de tâches typiques telles que les plantages, les fuites de ressources et les erreurs de synchronisation dans les applications multithreads utilisant le débogueur Windbg comme exemple. Le rapport intéressera principalement les développeurs novices travaillant avec la plate-forme Windows.


À propos de Speaker

Alexander Golovach est un programmeur système Windows, développeur de Checkpoint Endpoint Security. Il a participé à la création de produits tels que Anti Exploit, Anti Ransomware et Endpoint Forensics.



5. Fonctionnement du backend LLVM en C # - Egor Bogatov


LLVM contient un grand nombre d'optimisations et convient comme backend pour de nombreux langages de programmation. Mais les choses se compliquent un peu pour les langages gérés et les scripts JIT. Dans ce rapport, Yegor parlera des difficultés rencontrées par les développeurs C # lors de l'implémentation du backend LLVM.


À propos de Speaker

Egor Bogatov travaille dans l'équipe .NET / Mono chez Microsoft, s'intéresse aux microoptimisations et LLVM.



4. Etudes sur la mise en mémoire tampon: alertes asynchrones, réplication des mises à jour, consolidation des requêtes en attente - Vadim Vinnik


La pratique du développement d'une application spécifique peut conduire à un énoncé du problème qui, dans une pensée mature, s'avère suffisamment général pour l'isoler dans une abstraction potentiellement utile pour de nombreuses applications différentes. Apporter une solution à une forme adaptée à une utilisation répétée, contrairement à une solution qui répond aux besoins d'une application particulière, nécessite un effort mental supplémentaire pour mettre en évidence les différents aspects de la tâche et les modéliser à l'aide du langage. Le rapport présente l'expérience de la mise en œuvre de trois abstractions, unies par un thème commun - la mise en mémoire tampon des données dans le traitement multithread. Le cheminement de la pensée de l'analyse de la tâche à la mise en œuvre au moyen du langage C ++ 17 est montré.


À propos de Speaker

Vadim Vinnik est un candidat en sciences physiques et mathématiques, 10 ans d'expérience dans l'enseignement de la programmation aux étudiants, y compris à l'Université nationale Taras Shevchenko de Kiev. Plus de 10 ans d'expérience en programmation industrielle (principalement en C / C ++ / C #), avec un focus sur les domaines de la sauvegarde et de la récupération de données. Vadim - auteur des livres «Langages algorithmiques et principes fondamentaux de la programmation: langage C», «Principes fondamentaux de la programmation orientée objet en C ++»; auteur de 29 publications scientifiques sur la théorie de la programmation; traducteur de l'anglais vers le russe des livres «Principes de programmation orientée objet» (Anton Eliens), «Combiner les théories de la programmation» (Charles Hoar, Hee Jifen). Domaines d'intérêt: programmation en C ++ et langages fonctionnels (Haskell).



3. SQL statique en C ++ 14 - Evgeny Zakharov


L'orateur parlera du développement de la bibliothèque de bibliothèque sqlite_orm ORM pour SQLite3 en C ++ 14 et partagera son expérience en essayant de créer un ORM avec lequel vous pouvez oublier les requêtes de texte et comment il s'adapte au C ++ à l'aide de modèles.


À propos de Speaker

Evgeny Zakharov est un développeur de jeux C ++, auteur de la bibliothèque sqlite_orm.



2. Métaprogrammation: construire une machine à états finis - Sergey Fedorov


L'implémentation manuelle des machines à états à l'aide d'un boîtier de commutation ou d'un héritage avec des fonctions virtuelles prend beaucoup de temps et est source d'erreurs. Dans le rapport, le conférencier parle de la bibliothèque de machines d'état AFSM (Another Finite State Machine), qui vous permet d'utiliser un langage déclaratif pour décrire la machine d'état. Et aussi de petites astuces et astuces de métaprogrammation sur des exemples du code de cette bibliothèque.


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



1. Protéger le C ++ - Pavel Filonov


Le C ++ est souvent comparé au nunchucks: entre des mains habiles, c'est un outil efficace, et entre les mains d'un débutant il y a un danger pour sa propre santé. Cette comparaison est évidemment inspirée par l'opinion du C ++ comme langage de programmation dangereux. Certaines nouvelles langues utilisent même cette opinion pour leur propre promotion. Mais quels dangers spécifiques se cachent derrière le terme «dangereux»? La réponse détaillée soulèvera évidemment plusieurs directions, dont la cybersécurité. Le rapport couvrira des exemples simples d'exploitation de vulnérabilités dans le code C / C ++: exécution de code shell sur la pile, retour à libc, réécriture de vptr, débordement de tas.

Mais l'accent principal est mis sur la protection contre de telles attaques: un canari sur la pile, ASLR, zones impossibles, tests et désinfectants, fuzzing, processus SDL.


À propos de Speaker

Pavel Filonov a participé au développement des systèmes Max Patrol SIEM en tant que développeur C ++ et Kaspersky MLAD en tant que Data Scientist. Membre du comité de programme de la conférence C ++ Russia. Spécialisé dans les sujets CI / ML / performance.



Et aussi, quelques rapports bonus!

Automatisez-le - Kirill Tikhonov


Nous allons écrire le service Web le plus simple du client et du serveur en C ++. Sur cette partie C ++ se terminera et la configuration de l'environnement et de l'infrastructure ira. Nous assurerons la déterminabilité de l'assemblage et du test. Facilitez la mise à jour ultérieure des bibliothèques dépendantes. Nous automatisons les contrôles statiques, la vérification du code et les tests. Nous assurerons la disponibilité du service, configurerons l'infrastructure, équilibrerons la charge et ajouterons une mise à l'échelle automatique et manuelle. Et à la fin, nous mettrons en place une livraison continue afin que le code soit en production 5 minutes après la demande, et même des modifications non valides et des erreurs de programmation ne pourront pas affecter son travail.


Écrivez-vous toujours du code avec vos mains? Ensuite, nous allons à vous! - Sergey Sadovnikov


Dans le monde du développement C ++, il existe de nombreuses tâches dans lesquelles vous devez écrire une grande quantité de code standard: sérialisation, RPC, ORM, liaisons de langage de script, etc. Et, bien sûr, il existe de nombreuses approches qui simplifient l'écriture de ce code pour, disons, pour la sérialisation: tout écrire avec vos mains, tout mettre dans des macros, faire glisser dans des modèles dirigés par Hana, combiner l'un avec l'autre. Mais il existe une approche qui devrait finalement remplacer toutes les autres: la génération de code. json, bson, xml, yaml, protobuf - il existe de nombreuses options pour les formats dans lesquels vous pouvez enregistrer des données. Chaque format a ses propres bibliothèques, et pas une. Les bibliothèques offrent constamment leur propre façon de décrire les données, et certaines offrent toute une infrastructure pour laquelle vous devez vous adapter et affiner votre code. Et ce n'est pas toujours pratique, car on veut la liberté. J'aimerais que le texte source dépende le moins possible de la façon dont les données sont sérialisées. Et les moyens modernes de génération de code peuvent offrir cette liberté, il vous suffit de savoir comment les utiliser correctement.


La catastrophe de la durée de vie des valeurs C ++ - Arno Schödl


Les liens Rvalue sont présents dans le langage depuis C ++ 11. Ils ont été introduits pour rendre les objets en mouvement plus efficaces. Avec de telles optimisations, cette innovation apporte beaucoup de nuances au langage que tout programmeur qui se respecte doit connaître. Plongeons-nous dans le monde des liens de valeur et examinons-les attentivement!


Exceptions C ++ à travers le prisme de l'optimisation du compilateur - Roman Rusyaev


Dans la cour du 21e siècle, l'implémentation improductive de la gestion des exceptions C ++ basée sur setjmp / longjmp est déjà dans le passé. Les compilateurs modernes, tels que gcc et clang, utilisent une implémentation avancée d'exceptions C ++ appelée gestion d'exceptions à coût nul. Mais dans quelle mesure ce coût zéro est-il vrai? Oui, nous payons en augmentant la taille du fichier binaire, ainsi que dans le cas où l'exception est réellement levée, en démarrant le processus de déroulement de la pile, en appelant des destructeurs pour les objets locaux, etc. Mais perdons-nous des performances si aucune exception n'est levée? Existe-t-il des restrictions sur les optimisations du compilateur? Ce rapport décrit comment les exceptions C ++ affectent les optimisations du compilateur. Quelles optimisations ne peuvent pas être appliquées si la fonction peut lever des exceptions et quelles optimisations deviennent plus difficiles à appliquer. Des exemples d'implémentation d'exceptions et d'optimisations du compilateur sont considérés sur la base de LLVM. Le rapport vise à permettre aux utilisateurs de comprendre quand il est judicieux de créer votre application avec -fno-exceptions, et quand vous pouvez profiter de tous les plaisirs de l'utilisation des exceptions C ++, sachant que leur code n'a pas perdu de manière significative les performances par rapport au code où les exceptions sont désactivées.


Générateurs, coroutines et autres douceur de déroulement du cerveau - Adi Shavit


C ++ 20 nous a apporté les coroutines et avec elles la possibilité d'écrire des générateurs, des types itérables et des plages. Nous verrons comment les coroutines aident à écrire du code plus propre et plus lisible avec des abstractions et une généralisation plus légères.


Comment ne pas s'étouffer avec un gros vieux projet - Yuri Minaev


Le monde a changé. Ce qui fonctionnait auparavant n'a pas cessé de fonctionner, mais il est devenu insuffisant. La programmation par paires, les revues de code, les tests unitaires sont toujours importants et nécessaires, mais ils ne peuvent plus fournir le bon niveau de qualité et de fiabilité des projets C ++. De nombreux projets se sont multipliés des centaines de fois. La croissance a été progressive et tout le monde n'a pas compris ce qui s'était passé. Tout grand projet ancien se compose de couches hétérogènes (gisements géologiques) et, surtout, personne ne sait déjà comment tout cela fonctionne. Le temps est venu de disposer d'outils et de méthodologies pour aider à maintenir la qualité et l'intégrité du code: DevSecOps, analyse statique, analyse dynamique, plateformes de mesure de la qualité.


Comment aider et comment empêcher le compilateur - Andrey Oleinikov


En règle générale, vous pouvez compter sur le fait que le compilateur optimise le fichier binaire résultant afin qu'il fonctionne le plus rapidement possible. Mais le compilateur ne sait pas sur quelles données et sur quel matériel le programme sera lancé. De plus, j'aimerais que la compilation prenne un temps acceptable. Pour cette raison, le résultat peut être sous-optimal. Je suggère d'utiliser des exemples pour LLVM pour voir comment vous pouvez dire au compilateur comment optimiser le programme et rendre le résultat meilleur ou pire.


Le prochain CoreHard (C ++ CoreHard Spring 2020 Conference) est en cours et se tiendra du 10 au 11 avril 2020 à Minsk, recherchez les billets et le programme complet sur le site officiel.

Et vous pouvez soumettre un rapport ici (piratage de la vie: l'orateur ne peut pas payer le billet!)

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


All Articles