Conversations sur C ++: WP 21, Boost, Conférences

Bonjour à tous!


Récemment, le prochain C ++ Siberia 2019 s'est tenu à Novossibirsk. La conférence avait une atmosphère chaleureuse et de nombreux bons rapports. Des enregistrements vidéo des rapports sont en cours de préparation pour publication. J'en ai profité pour m'entretenir avec deux de nos orateurs fréquents qui manquent rarement les conférences et font toujours d'excellents rapports: Anton Polukhin antoshkka et Pavel Filonov.


Anton 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 ++, les bibliothèques Boost et le livre de recettes de développement d'applications Boost C ++.


Pavel est développeur et chercheur au Kaspersky Lab, il est impliqué dans l'application de méthodes d'apprentissage automatique pour assurer la sécurité des systèmes cyber-physiques et est engagé dans l'enseignement. En attendant la vidéo de la conférence, je vous suggère de lire la transcription de notre conversation.



Sergey: Bonjour à tous! C'est Sergey Platonov, nous sommes maintenant à la conférence C ++ Siberia. Aujourd'hui, nous discutons avec nos conférenciers habituels - Anton Polukhin et Pavel Filonov. Comment allez vous


Pavel: Génial! Nous sommes de retour à Novossibirsk.


Sergey: Nous sommes maintenant assis face aux forêts de Sibérie.


Pavel: Belle vue, gens sympas, sujets très intéressants.


Anton: Et en ce moment il fait plus chaud ici qu'à Moscou.


Sergey: Je voudrais vous parler du C ++ aujourd'hui, aussi étrange que cela puisse paraître lors d'une conférence C ++. À propos de différentes choses. Par exemple, je suis très intéressé par la raison pour laquelle vous venez à la conférence de Moscou à Novossibirsk, et ce n'est pas la première fois.


Pavel: Pour moi, je peux dire que j'ai une raison principale - j'aime vraiment dire quelque chose à quelqu'un. Je ne peux pas le garder pour moi. Quand j'apprends quelque chose de nouveau intéressant, d'une part, je doute toujours que ce soit vraiment bon, intéressant, je dois aller dire aux gens et voir comment ils réagiront à cela - s'ils cracheront ou leur demanderont de revenir. Et à en juger par le fait qu'ils ne crachent pas, ils ne jettent pas de tomates, les gens aiment probablement les choses qui m'éclatent. Je veux les écouter et en discuter. De plus, c'est toujours un plaisir de rouler. La première fois que j'étais à Novossibirsk, c'était à la conférence C ++ Siberia, et la deuxième fois aussi. Juste comme ça, je n’arriverais pas ici.


Anton: C’est toujours intéressant de voyager dans d’autres villes. C'est merveilleux à Novossibirsk, il fait plus chaud ici qu'à Moscou. La neige mouillée ne coule pas sur la peau du cou. Un plus!


Sergey: Bien sûr, je suis hypocrite et pose cette question pour une raison. J'ai des souvenirs du groupe de travail 21 et comment, à mon avis, il est apparu. Je suis intéressé à écouter l'homme qui l'a fait. Comment se fait-il que la Russie soit maintenant représentée au comité?


Anton: C'est arrivé en C ++ Russie à Saint-Pétersbourg. Je me souviens que je suis entré dans l'ascenseur avec ma femme, Gor Nishanov ( Twitter ) était déjà là, j'ai réalisé que c'était un excellent moyen de savoir comment entrer dans le comité international de normalisation. En fait, je lui ai posé des questions à ce sujet. Et Gore est comme ça: «Tu sais, aujourd'hui tu es loin d'être le premier à me poser cette question. Des gens de Yandex vous ont approché. » Je réponds que je travaille depuis peu de temps chez Yandex et que je demande de décrire à quoi ressemblaient ces personnes - je les aborderai également. Gore m'a tout dit. Je suis allé voir les gens qu'il a décrits. Et il s'est avéré que Yandex allait créer une sorte de groupe de travail pour se tenir au courant du C ++ et représenter les intérêts des développeurs russes dans un comité international. Le groupe a été créé. Il n'y a pas que des employés de Yandex, il y a des employés d'autres sociétés.


Pavel: Maintenant, du Kaspersky Lab en tant que membre du groupe, Anton Bikineev y travaille également. Aujourd'hui, malheureusement, il n'est pas avec nous.


Anton: Soit dit en passant, Anton fait une chose très cool - il est monté à l'intérieur du compilateur avec les bras et les jambes et essaie de mettre en œuvre l'une de nos propositions. Il a même un prototype plus ou moins fonctionnel.


Pavel: Soit dit en passant, il se plaint de vous que vous rédigez des propositions plus rapidement qu'il ne parvient à les implémenter dans le compilateur.


Anton: Oui, ça l'est.


Sergey: Autrement dit, Anton Bikineev agit ici en tant que groupe central de notre groupe de travail? Il est bon d’entendre que les conférences y ont contribué. J'espère que tout le monde comprend à quel point c'est utile et intéressant. Il s'avère que vous n'avez pas à travailler chez Yandex pour entrer dans le groupe de travail?


Anton: En général, il n'est pas nécessaire de faire partie d'un groupe de travail pour transmettre votre idée au comité de normalisation C ++ ou pour faire partie des avantages.


Pavel: Il semble que vous pouvez simplement aller sur le site et laisser votre suggestion.


Anton: Oui, à https://stdcpp.ru . Là, vous pouvez partager l'idée, discuter des idées des autres participants. Il y a beaucoup d'idées, mais pas assez de mains pour tout prendre en main. Par conséquent, si une personne vient et commence à rédiger des ébauches spécifiques d'au moins quelques propositions d'idées, cela deviendra plus facile pour tout le monde et ces idées seront rapidement transmises au comité.


Pavel: Que pensez-vous, Anton, dans quelle proposition ou autre est la plus grande contribution du groupe de travail exprimée?


Anton: Nous avons fait une direction pour toute la réflexion statique chez les pros. Comme je me souviens maintenant: il y avait une proposition de faire constexpr_vector - une classe séparée qui ne peut être utilisée que dans un contexte constexpr. David sort (David Vandevoorde) et parle de cette chose. Toute la salle crie joyeusement, faisons-le. Et il est comme ça: «Mais nous voulons dupliquer toutes les classes de la bibliothèque standard comme ça? Pas d'autre moyen. " «Peut-être constexpr_new? "" Non, ça ne marche pas. " Et je suis comme ça: défi accepté. Et trois mois plus tard, Sasha Zaitsev et moi avons réalisé un prototype qui permet à std::vector de fonctionner dans un contexte constexpr. Cela fonctionne directement, sur clang, même dans le compilateur, je n'avais rien à jouer. Nous l'avons montré à David, il dit: «Ah! Eh bien comme ça? Non, tu as triché ici. " Nous avons accepté. Il dit: «Non, eh bien, bien sûr que vous le pouvez. Au fait, pourquoi pas. Après cela, il a jeté le papier avec constexpr_vector et a commencé à travailler pour que tous les conteneurs de la bibliothèque standard puissent utiliser le contexte constexpr. Maintenant, il y a déjà beaucoup de monde. Nous, du groupe de travail, avons fondamentalement manqué tous les algorithmes avec constexpr, Louis Dion fait les conteneurs manqués avec constexpr, et David fait habilement le noyau du langage pour créer une sorte de constexpr nouveau.


Sergey: Est-ce à propos des allocateurs?


Anton: Oui. Il y avait un problème dans les répartiteurs.


Sergey: Génial! Cela semble être de grands changements.


Anton: Encore 6 ans, et ils apparaîtront dans la norme ;-)


Pavel: Non, probablement, nous n'aurons pas le temps de les toucher du bout des doigts si rapidement.


Anton: les conteneurs constexpr devraient être dans la vingtième norme. les algorithmes constexpr ont définitivement frappé.


Pavel: C'est-à-dire juste quelques années?


Sergey: Si 2019 a commencé maintenant, alors la 20e norme sera quelque part en 2020. Eh bien, oui, probablement quelques années.


Pavel: De plus, si je me souviens bien, les compilateurs étaient toujours en retard par rapport aux descripteurs standard, maintenant je vois souvent des tentatives pour exécuter d'abord quelque chose comme une expérience via le compilateur - ce que fait Anton est ce que vous dites. Et alors seulement, prenez-le sous forme de normes.


Sergey: Avant, je me souviens, il y avait encore TR.


Anton: Mais ils ont été jetés en faveur de TS. Beaucoup de choses ont changé, oui :-)


Sergey: Autrement dit, maintenant dans les compilateurs modernes, vous pouvez également connecter l'espace de noms ts ?


Anton: Là maintenant c'est fait avec des cases à cocher avec des extensions au compilateur, c'est-à-dire qu'il y a des Coroutines TS, vous pouvez les essayer dans Clang et Visual Studio . Il existe des modules TS, et ils ne sont pas les mêmes partout. Il y a des TS sur les trucs de bibliothèque, le multithreading, la mise en réseau.


Sergey: C'est toujours le cœur du langage avec les allocateurs, est-ce aussi défini par un certain drapeau distinct?


Anton: On ne lui donnera pas de drapeau séparé. David (David Vandevoorde) - l'un des développeurs du compilateur, l'un des développeurs front-end EDG, il vient de l'implémenter. On pense que c'est ok, cela ne casse rien, nous ne voulons pas d'autres nouveaux, quelque chose n'a pas de sens à expérimenter ici, tout fonctionne. Super, nous tirons.


Sergey: Très cool.


Pavel: Soit dit en passant, revenons au sujet des conférences. Anton, vous êtes un conférencier fréquent non seulement en C ++ Russie, mais vous assistez également à CPP Con, Meeting CPP, CPP Now, peut-être autre chose. Pouvez-vous en quelque sorte comparer et dire ce que vous voyez la différence? S'agit-il des mêmes personnes, des mêmes sujets ou est-ce que, selon la façon dont vous vous déplacez, le sujet ou la langue de travail de la conférence change?


Anton: En principe, on pense que lors des conférences en Russie, il y a des développeurs très forts. Vous pouvez leur parler de sujets très complexes. J'ai essayé de parler d'un sujet extrêmement difficile, magic_get, quelque part dans une autre conférence, et je me souviens d'un mec qui, pendant que je parlais, a cessé de répondre aux stimuli externes. Il s'assoit et ne clignote pas. J'ai pensé, peut-être que je peux insérer une blague - je l'ai insérée, plaisanté - il n'a même pas cligné des yeux. Puis il s'est déplacé. Mais il vaut probablement mieux raconter un tel hardcore seulement ici quelque part.


Sergey: Et seulement à Anton Bikineev . C'est juste que nous avons rappelé l'histoire juste à l'heure du dîner, lorsque vous parliez de magic_get lors d'une des réunions.


Pavel: Anton a assisté à cette réunion et vous a posé une question tellement difficile qu'il est clairement allé au-delà de ce que vous avez dit. Il semble que la recherche dans la liste des types ne soit pas linéaire, mais à l'aide de la recherche binaire. Vous lui avez répondu et lui avez demandé comment il le savait. À laquelle Anton a mentionné qu'il avait lu les sources de magic_get , qui se trouve sur votre GitHub, toute la nuit avant votre rapport et a essayé de comprendre comment cela fonctionne.


Anton: Nous avons une vieille histoire étrange avec Anton Bikineev. J'ai vu comment il a fait quelques commits dans Boost, avant même que nous nous connaissions. Et après cela, j'ai vu qu'il a fait une demande de tirage à la fois dans Clang et constexpr. J'ai vu cette demande de retrait, et pour une raison quelconque, je me suis souvenu du nom à ce moment-là. Probablement parce que le mec de Boost qui s'engage à Clang est super! Ensuite, je parle en C ++ Sibérie du 17ème plus, de if constexpr, et le mec crie du public: "Oui, j'ai même fait ça un peu à Clang." Je me dis: "Tu es Anton Bikineev!"


Sergey: C ++ Siberia se connecte.


Pavel: Aussi, si je me souviens bien, c'est en Sibérie que nous avons commencé à mettre en place les premières expériences sur les master classes. Au début, ils ont essayé de les essayer, pour voir si ce format irait. Et comme le montre la pratique des 3-4 dernières conférences, si l'on compte C ++ Russie, il me semble que le nouveau format s'est très bien passé. Par exemple, j'ai maintenant l'occasion, non pas en 40 minutes, d'essayer de pousser un sujet, mais calmement pendant 6 heures pour dire aux gens tout ce que je pense nécessaire. Si les gens sont prêts, je dis tout ce que je peux, même plus de six heures.


Anton: Les ateliers sont amusants. Parfois, ils posent de telles questions que vous vous dites: "Merde, pourquoi?" Et pendant plusieurs jours, vous essayez de comprendre pourquoi cela ne fonctionne pas sur ce compilateur particulier, sur ce portable malheureux particulier. Et il y a une sorte d'erreur dans le compilateur ou autre chose. Il semblerait que vous veniez à la classe de maître juste pour dire quelque chose, mais à la place, vous obtenez une rétroaction utile qui aide à réparer quelque part, à améliorer quelque chose.


Sergey: Du point de vue de l'organisateur de la conférence et du conservateur communautaire, je dirai que les ateliers sont très utiles pour moi, car parfois les gens y vont, acquièrent des connaissances de base, les développent davantage, les appliquent et reviennent avec un rapport à ce sujet. Plusieurs personnes sont venues me voir et m'ont dit qu'elles étaient allées en master class à l'un d'entre vous, elles étaient très intéressées par le sujet, et elles ont fait leur propre rapport.


Pavel: Anton, je me souviens que tu es aussi l'auteur du livre sur Boost , maintenant la deuxième édition est déjà sortie. Dites-moi comment vous avez décidé de l'écrire? Par exemple, je ne m'engagerai toujours pas à exprimer mes pensées dans un format aussi compliqué, à mon avis.


Anton: C'était un mois chargé à Boost, je me disputais avec quelqu'un là-bas, maudissais avec quelqu'un et disais ce qui devait être mal fait. Ils m'ont convaincu et, semble-t-il, m'ont convaincu. Et l'éditeur cherchait juste des gens qui écriraient un livre sur Boost. Il semble qu'ils aient regardé la liste de diffusion Boost, regardé le participant le plus actif qui a parlé avec plus de confiance que tout le monde et m'ont choisi.


Pavel: Comment avez-vous commencé à contribuer à Boost? Était-ce un travail ou juste un hobby?


Anton: Cela était dû au fait que je ne comprenais pas comment fonctionne Boost. Nous avons utilisé Boost au travail. L'une de mes toutes premières œuvres a été Boost, et je ne savais même pas comment cela fonctionne là-bas, pourquoi cela fonctionne comme ça.


Paul: Boost est un peu une bibliothèque magique jusqu'à présent.


Anton: Et j'ai commencé à regarder, à comprendre, et à un moment donné, j'ai soudain réalisé que dans lexical_cast vous pouvez faire mieux. Ensuite, j'ai écrit à ce responsable, Alexey de lexical_cast , appliquons ce correctif, mais il ne m'a pas répondu. Je lui ai écrit deux ou trois patchs supplémentaires.


Pavel: Si je me souviens bien, vous devez être ferme dans la promotion de vos correctifs.


Anton: Bien sûr. Avec l'open source toujours. En conséquence, le responsable a dit qu'il lexical_cast complètement maintenant, il avait beaucoup à faire et m'a proposé de devenir un responsable lexical_cast . J'étais ravi et d'accord. Et puis Boost.Any, Boost.Variant J'ai raccroché lentement sur moi. À ce moment, il a écrit quelques-unes de ses bibliothèques, Boost.TypeIndex, Boost.Stacktrace, qui est maintenant acceptée comme standard.


Pavel: Où avez-vous des idées de nouvelles fonctionnalités dans des bibliothèques prêtes à l'emploi?


Anton: Certaines choses, par exemple, Boost.DLL - cette personne a écrit à la liste de diffusion Boost, ils disent, regardez, quelle bibliothèque cool j'ai, ça fait beaucoup de choses très effrayantes, compliquées et intéressantes. Je l'ai regardée comme ceci: "Eh bien, oui, oui, oui, oh, mais j'aimerais ça!" J'ai contacté ce mec et lui ai suggéré de retirer un morceau pour travailler séparément avec les plugins. Ils l'ont retiré séparément, et il s'est avéré que cette pièce est entrée dans Boost beaucoup plus tôt que ce que l'homme lui-même fait. Avec Stacktrace, à un moment donné, j'ai réalisé qu'il n'y avait pas de mécanisme pour obtenir Stacktrace. Oui, parfois il m'atteint lentement. Et c'était juste le moment où j'ai réalisé que chez les pros, il n'y avait aucun moyen d'obtenir Stacktrace.


Pavel: Il semble que dans deux œuvres différentes, j'ai écrit deux fois une bibliothèque similaire afin d'imprimer les traces de pile à l'automne.


Anton: Et donc je l'ai pris, essayé, jeté aux gens de Boost, ils ont dit non, ça ne fera pas ça. Ensuite, j'ai essayé deux fois de plus, et voici une des versions, elle a tout arrangé et a pris racine.


Pavel: Mais l'utilisez-vous d'une manière ou d'une autre dans votre travail?


Anton: Oui, chez Yandex.Taxi utilise très activement Boost.Stacktrace, c'est très bien avec les mêmes actions, par exemple. Avez-vous quelque chose en commun - travailler avec JSON, par exemple. L'utilisateur à un moment donné accède au champ JSON qui n'est pas là. Il suffit de lever une exception? Eh bien, quelque part au-dessus, il va attraper. En général, l'utilisateur a appelé où? Là, dans tout le code pour travailler avec JSON, l'utilisateur a-t-il le champ exact où il ne l'a pas atteint? À quel moment l'a-t-il demandé? Et Stacktrace aide parfaitement à comprendre ce qui et ce qui ne va pas, où l'utilisateur a gâché.


Pavel: Souvent, les versions que vous utilisez au travail commencent à se disperser avec ce qui est en open source? Ou essayez-vous constamment de transférer des fonctionnalités d'avant en arrière?


Anton: Je transfère des fonctionnalités d'avant en arrière. Bien sûr, avec la permission de la direction. Et je dirai que c'est une interaction très utile. Par exemple, dans Yandex.Taxi, nous avons remarqué que la fonction toString () pour Stacktrace est manquante. C'est dans la proposition de normalisation, c'est décrit partout, mais ce n'est pas dans Boost. Malgré le fait qu'il me semblait qu'elle était là, j'ai arraché toute la proposition de normalisation de Boost. Ajouté à Boost. Tout le monde est content.


Pavel: Au fait, revenons au groupe de travail. Probablement, vous vous rendez immédiatement à la prochaine réunion après C ++ Siberia?


Anton: Oui, je monterai dans l'avion demain matin, 40 heures de vol, et le même jour je prendrai l'avion pour Kona. À l'ordre du jour de la réunion, l'ensemble du comité doit décider à quoi ressemblera le C ++ 20. Le dernier arrêt avant C ++ 20 ne restera qu'une correction de bogue. Les modules et coroutines sont désormais à l'ordre du jour.


Pavel: Deux éléments importants sur lesquels il y a de longs et ardents débats.


Anton: Tout est plus ou moins clair avec les modules, ils semblent être acceptés, mais avec les coroutines c'est complètement incompréhensible, car juste à cette réunion la troisième proposition concurrente de coroutines est apparue. C'est complètement différent, complètement différent de ce qui est dans le Coroutines TS, et il y a des points forts. Il y en a, bien sûr, des faibles. On ne sait pas du tout comment cela se passera. Et comment généralement les gens sont à l'écoute des coroutines.


Pavel: Quels sont vos projets pour le prochain C ++ Russia? Souhaitez-vous un rapport de votre part?


Anton: Oui, certainement. Je vais trouver quelque chose. Peut-être à propos de Pilorama.


Sergey: Eh bien, merci beaucoup, mes amis! Je ne te retiendrai plus. Salut tout le monde! Rendez-vous en C ++ Russie .


Quelques mots sur les formations à la conférence C ++ Russie


Comme Pavel l'a dit à juste titre dans cette interview, les formations et les master classes ont un avantage incontestable: le modérateur a la possibilité de ramener l'ensemble du sujet en quelques heures, plutôt que d'essayer de garder dans les 50 minutes comme dans un rapport régulier.


Lentement, les master classes deviennent une tradition. Nous les avons d'abord tenus en 2017, puis nous les avons testés en C ++ Sibérie. Cette année, il y aura trois master classes. Vous avez déjà rencontré les dirigeants de deux d'entre eux dans cette interview.


Une master class dure six heures, combinant informations théoriques et exercices pratiques. Un petit nombre de participants assure un travail individuel avec chacun. C'est, tout d'abord, bien sûr, la pratique. Ainsi, toutes les classes de maître nécessiteront un ordinateur portable avec le compilateur C ++ moderne installé.


Trois master classes ont été proposées: «La programmation fonctionnelle appliquée en C ++» sera dirigée par Ivan Čukić, et «L'intégration continue pour le développeur C ++» et «C ++ intelligent et moderne» sera assurée par nos développeurs, Pavel Filonov et Anton Polukhin.


La classe de maître d'Ivan n'est pas pour le niveau d'entrée, elle conviendra aux intermédiaires qui veulent ouvrir plus largement les portes de la perception. Ivan est chercheur à l'Université de Belgrade, mainteneur de KActivities, Contour daemon, Lancelot et d'autres projets KDE. Il s'agira, comme vous pouvez le comprendre, de programmation fonctionnelle. Au cas où, les participants sont invités à avoir les dernières versions de GCC et Clang. Un peu plus tard, nous présenterons une image VirtualBox avec tout ce dont vous avez besoin. Les sujets suivants seront abordés lors de la master class: la STL est-elle loin de la programmation fonctionnelle, quels sont les objets fonctionnels, std :: invoke et monads, monads, monads. Et quelques monades de plus.


Vous connaissez déjà ce développeur chercheur chez Kaspersky Lab Pavel Filonov . Il invitera les participants à construire leur CI avec du conan et du travis. Pavel expliquera également la méthode d'intégration continue, et dans la partie pratique, il enseignera à résoudre des problèmes à l'aide d'exemples d'un projet / travail à domicile sur Open Source et d'un projet de travail avec code source fermé.


Naturellement, vous devriez pouvoir programmer en C ++, apporter un ordinateur portable avec n'importe quel système d'exploitation, l'un des principaux compilateurs, cmake frais (vous devez comprendre la syntaxe de CMakeLists.txt), git, python 3 et pip3 et un tas de comptes. Plus de détails à ce sujet sont dans la description sur le site .


Et enfin, une classe de maître d' Antoshkka est consacrée aux compétences d'optimisation appropriée. Juste au cas où, je vous le rappelle: il est développeur senior du service Yandex.Taxi, représentant de WP 21 lors des réunions internationales du comité de normalisation C ++, auteur de propositions acceptées pour un standard de langage, développeur de Boost, etc. Anton examinera des exemples avec des erreurs fréquentes d'optimisation prématurée, puis les participants examineront les algorithmes et les complexités de la bibliothèque standard, les conteneurs avec des fonctionnalités, la sémantique Move et son comportement inattendu, le multithreading. Étant donné que le cours est pratique, tous les sujets seront étudiés expérimentalement à l'aide de la bibliothèque C ++ pour les tests de référence de Google. Pour le cours, vous n'aurez besoin que de connaissances de base en C ++ et du dernier compilateur avec prise en charge de C ++ 11.


Tout ce qui précède n'est bien sûr qu'une brève référence pour votre référence. La seule véritable source de vérité est le site de la conférence , où tout est détaillé et clairement énoncé. Par exemple, il répertorie clairement les logiciels nécessaires sur votre ordinateur portable ainsi que ses versions.


La conférence C ++ Russie se tiendra les 19 et 20 avril 2019 à Moscou. Les billets peuvent être achetés sur le site officiel . Important: à partir du 1er mars, le prix des billets augmentera. Si vous souhaitez acheter au prix de février, vous devez le faire maintenant.

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


All Articles