Conversas em C ++: WP 21, Boost, Conferences

Olá pessoal!


Recentemente, em Novosibirsk, foi realizado o próximo C ++ Siberia 2019. A conferência teve um ambiente acolhedor e muitos bons relatórios. As gravações em vídeo dos relatórios estão sendo preparadas para publicação. Aproveitei a oportunidade para falar com dois de nossos oradores frequentes, que raramente perdem as conferências e sempre fazem excelentes reportagens: Anton Polukhin antoshkka e Pavel Filonov.


Anton é o representante da Rússia na ISO em reuniões internacionais do grupo de trabalho de padronização C ++, autor de várias propostas aceitas para o padrão de linguagem C ++, as bibliotecas Boost e o Boost C ++ Application Development Cookbook.


Pavel é desenvolvedor e pesquisador da Kaspersky Lab. Ele está envolvido na aplicação de métodos de aprendizado de máquina para garantir a segurança dos sistemas ciber-físicos e está envolvido no ensino. Enquanto aguarda o vídeo da conferência, sugiro que você leia a transcrição da nossa conversa.



Sergey: Olá pessoal! Este é Sergey Platonov, estamos agora na conferência C ++ Siberia. Hoje estamos conversando com nossos palestrantes regulares - Anton Polukhin e Pavel Filonov. Como esta


Pavel: Ótimo! Estamos de volta a Novosibirsk.


Sergey: Agora estamos sentados de frente para as florestas da Sibéria.


Pavel: Bela vista, pessoas legais, tópicos muito interessantes.


Anton: E no momento está mais quente aqui do que em Moscou.


Sergey: Gostaria de falar com você sobre C ++ hoje, por mais estranho que pareça em uma conferência em C ++. Sobre coisas diferentes. Por exemplo, estou muito interessado em saber por que você compareceu à conferência de Moscou a Novosibirsk, e essa não é a primeira vez.


Pavel: Para mim, posso dizer que tenho um motivo principal - gosto muito de contar algo a alguém. Não consigo guardar para mim. Quando aprendo sobre algo novo e interessante, por um lado, sempre duvido que seja realmente bom, interessante, preciso contar às pessoas e ver como elas reagirão a isso - se elas cuspirão ou pedirão que voltem. E, a julgar pelo fato de não cuspirem, não jogam tomates, as pessoas provavelmente gostam das coisas que estão explodindo comigo. Eu quero ouvir e discuti-los. Além disso, é sempre um prazer pilotar. A primeira vez que estive em Novosibirsk foi na conferência C ++ Siberia e a segunda vez também. Assim, eu não chegaria aqui.


Anton: É sempre interessante viajar para outras cidades. É maravilhoso em Novosibirsk, é mais quente aqui do que em Moscou. A neve molhada não cai sobre a nuca. Uma vantagem!


Sergey: Claro, sou falso e faço esta pergunta por um motivo. Tenho lembranças do grupo de trabalho 21 e como, na minha opinião, ele apareceu. Estou interessado em ouvir o homem que realmente fez isso. Como aconteceu que a Rússia agora está representada no comitê?


Anton: Isso aconteceu no C ++ Rússia em São Petersburgo. Lembro que entrei no elevador com minha esposa, Gor Nishanov ( Twitter ) já estava lá, percebi que essa é uma ótima maneira de descobrir como entrar no comitê internacional de padronização. Na verdade, perguntei a ele sobre isso. E Gore é assim: “Sabe, hoje você está longe de ser o primeiro a fazer essa pergunta para mim. Pessoas da Yandex se aproximaram de você. Respondo que trabalho há pouco tempo na Yandex e pedi para descrever como essas pessoas pareciam - vou abordá-las também. Gore me contou tudo. Eu fui para as pessoas que ele descreveu. E realmente aconteceu que a Yandex criaria um tipo de grupo de trabalho para acompanhar o C ++ e representar os interesses dos desenvolvedores russos em um comitê internacional. O grupo foi criado. Não existem apenas funcionários da Yandex, existem funcionários de outras empresas.


Pavel: Agora, do Kaspersky Lab como membro do grupo, Anton Bikineev também trabalha lá. Hoje, infelizmente, ele não está conosco.


Anton: A propósito, Anton faz uma coisa muito legal - ele subiu no compilador com braços e pernas e tentou implementar uma de nossas propostas. Ele ainda tem um protótipo mais ou menos funcional.


Pavel: A propósito, ele reclama de você que você escreve propostas mais rapidamente do que ele consegue implementá-las no compilador.


Anton: Sim, é.


Sergey: Ou seja, Anton Bikineev atua aqui como um grupo central do nosso GT de trabalho? É bom saber que as conferências contribuíram para isso. Espero que todos entendam o quanto isso é útil e interessante. Acontece que você não precisa trabalhar no Yandex para entrar no grupo de trabalho?


Anton: Em geral, não é necessário fazer parte de um grupo de trabalho para transmitir sua ideia ao comitê de padronização de C ++ ou para fazer parte das vantagens.


Pavel: Parece que você pode simplesmente ir ao site e deixar sua sugestão.


Anton: Sim, em https://stdcpp.ru . Lá você pode compartilhar a idéia, discutir as idéias de outros participantes. Existem muitas idéias, mas não há mãos suficientes para assumir tudo. Portanto, se uma pessoa vier e começar a escrever rascunhos específicos de pelo menos algumas propostas de idéias, será mais fácil para todos, e essas idéias chegarão rapidamente ao comitê.


Pavel: O que você acha, Anton, em qual proposta ou outra coisa é a maior contribuição do grupo de trabalho expressa?


Anton: Nós fizemos uma direção para toda a reflexão estática nos profissionais. Como me lembro agora: havia uma proposta para tornar constexpr_vector - uma classe separada que só pode ser usada em um contexto constexpr. David sai (David Vandevoorde) e fala sobre isso. O salão inteiro está gritando de alegria, vamos fazê-lo. E ele é assim: “Mas queremos duplicar todas as classes na biblioteca padrão assim? Não tem outro jeito. “Talvez constexpr_new? "" Não, não funciona. " E eu sou assim: desafio aceito. E três meses depois, eu e Sasha Zaitsev fizemos um protótipo que permite que o std::vector funcione em um contexto constexpr. Funciona diretamente, no clang, mesmo no compilador, eu não precisava tocar nada. Mostramos a David, ele diz: “Ah! Bem assim? Não, você trapaceou aqui. Nós concordamos. Ele diz: “Não, bem, é claro que você pode. A propósito, por que não? Depois disso, ele jogou o papel fora com constexpr_vector e começou a trabalhar para que todos os contêineres da biblioteca padrão pudessem usar o contexto constexpr.Agora já existem muitas pessoas lá. Nós do grupo de trabalho basicamente perdemos todos os algoritmos com constexpr, Louis Dion faz com que os contêineres falhem com constexpr, e David faz com que o núcleo da linguagem habilmente torne algum tipo de constexpr novo.


Sergey: Isso é sobre alocadores?


Anton: Sim. Houve um problema nos alocadores.


Sergey: Ótimo! Essas parecem grandes mudanças.


Anton: Mais 6 anos, e eles aparecerão no padrão ;-)


Pavel: Não, provavelmente, não teremos tempo de tocá-los na ponta dos dedos tão rapidamente.


Anton: os recipientes constexpr devem estar no vigésimo padrão. algoritmos constexpr definitivamente atingido.


Pavel: Ou seja, apenas alguns anos?


Sergey: Se 2019 começou agora, o 20º padrão estará em algum lugar em 2020. Bem, sim, provavelmente alguns anos.


Pavel: Além disso, se bem me lembro, os compiladores estavam sempre atrás dos descritores padrão, agora vejo muitas vezes tentativas de executar algo como um experimento através do compilador - o que Anton está fazendo é o que você está dizendo. E só então tome isso na forma de padrões.


Sergey: Antes, eu me lembro, ainda havia TR.


Anton: Mas eles foram jogados a favor do TS. Muita coisa mudou, sim :-)


Sergey: Ou seja, agora nos compiladores modernos você também pode conectar o namespace ts ?


Anton: Agora, isso é feito com caixas de seleção com extensões para o compilador, ou seja, existem Coroutines TS, você pode experimentá-las no Clang e no Visual Studio . Existem módulos TS, e eles não são os mesmos em todos os lugares. Existem TSs em coisas de biblioteca, multithreading, networking.


Sergey: Este ainda é o cerne da linguagem com alocadores, isso também é definido por um determinado sinalizador separado?


Anton: Não será dada uma bandeira separada. David (David Vandevoorde) - um dos desenvolvedores de compiladores, um dos desenvolvedores de front-end da EDG, acabou de implementá-lo. Acredita-se que está tudo bem, não quebra nada, não queremos outros novos, algo não faz sentido experimentar aqui, tudo simplesmente funciona. Ótimo, estamos puxando.


Sergey: Muito legal.


Pavel: A propósito, voltando ao tópico das conferências. Anton, você é um orador frequente não apenas em C ++ Rússia, mas também participa de CPP Con, Meeting CPP, CPP Now, talvez outra coisa. Você pode comparar e dizer o que vê a diferença? São as mesmas pessoas, os mesmos tópicos ou, dependendo de como você se move, o assunto ou o idioma de trabalho da conferência mudam?


Anton: Em princípio, considera-se que em conferências na Rússia há desenvolvedores muito fortes. Você pode contar a eles tópicos muito complexos. Tentei contar um tópico extremamente difícil, magic_get, em algum lugar de outra conferência e lembro-me de um cara que, enquanto falava, parou de responder a estímulos externos. Ele apenas senta e não pisca. Eu pensei, talvez eu possa inserir uma piada - eu inseri, brinquei - ele nem sequer piscou. Então ele deu a volta. Mas provavelmente é melhor contar esse tipo de hardcore apenas aqui em algum lugar.


Sergey: E apenas para Anton Bikineev . É que lembramos a história apenas na hora do jantar, quando você estava falando sobre magic_get em uma das reuniões.


Pavel: Anton participou dessa reunião e fez uma pergunta tão difícil que ele claramente foi além do que você contou. Parece que a pesquisa na lista de tipos não é linear, mas com a ajuda da pesquisa binária. Você respondeu e perguntou como ele sabia disso. Para o qual Anton mencionou que estava lendo as fontes de magic_get , que estão no seu GitHub, a noite toda antes do seu relatório e tentando descobrir como ele funciona.


Anton: Temos uma história estranha e antiga com Anton Bikineev. Vi como ele fez alguns commits no Boost, mesmo antes de nos conhecermos. E depois disso, vi que ele fez uma solicitação de recebimento no Clang e no constexpr. Vi essa solicitação de recebimento e, por algum motivo, lembrei-me do nome naquele momento. Provavelmente porque o cara do Boost se comprometendo com Clang é ótimo! Então eu falo na C ++ Siberia sobre o dia 17, mais, se constexpr, e o cara grita da platéia: "Sim, eu até fiz isso um pouco em Clang." Eu sou como: "Você é Anton Bikineev!"


Sergey: o C ++ Siberia se conecta.


Pavel: Além disso, se bem me lembro, foi na Sibéria que começamos a montar os primeiros experimentos em aulas de mestrado. No início, eles tentaram experimentá-los, para ver se esse formato iria. E, como mostra a prática das últimas 3-4 conferências, se você contar com o C ++ Russia, parece-me que o novo formato correu muito bem. Por exemplo, agora tenho a oportunidade, não em 40 minutos, de tentar abordar algum tópico, mas com calma por 6 horas para contar às pessoas tudo o que acho necessário. Se as pessoas estão prontas, digo tudo o que posso, mais de seis horas.


Anton: As oficinas são divertidas. Às vezes, eles fazem perguntas como essas: "Droga, por que?" E por vários dias você está tentando entender por que isso não está funcionando neste compilador específico, neste laptop infeliz em particular. E há algum tipo de erro no compilador ou outra coisa. Parece que você vem à aula principal apenas para contar alguma coisa, mas, em vez disso, recebe um feedback útil que ajuda a consertar em algum lugar, a melhorar alguma coisa.


Sergey: Do ponto de vista do organizador da conferência e curador da comunidade, direi que os workshops são muito úteis para mim, porque às vezes as pessoas vão a ele, adquirem conhecimentos básicos, desenvolvem-no ainda mais, aplicam-no e retornam com um relatório sobre o assunto. Várias pessoas vieram até mim e disseram que foram a uma aula de mestre para um de vocês, estavam muito interessadas no tópico e fizeram seu próprio relatório.


Pavel: Anton, lembro que você também é o autor do livro sobre o Boost , agora a segunda edição já está lançada. Diga-me como você decidiu escrevê-lo? Por exemplo, ainda não me comprometerei a expressar meus pensamentos em um formato tão complicado, na minha opinião.


Anton: Foi um mês agitado no Boost, eu estava discutindo com alguém lá, xingando com alguém e dizendo o que deveria ser feito de errado. Eles me convenceram e, ao que parece, me convenceram. E a editora estava apenas procurando pessoas que escrevessem um livro no Boost. Parece que eles examinaram a lista de e-mails do Boost, observaram o participante mais ativo que falou com mais confiança do que todos os outros e me escolheram.


Pavel: Como você começou a contribuir para o Boost? Foi um trabalho ou apenas um hobby?


Anton: Isso foi devido ao fato de eu não entender como o Boost funciona. Usamos o Boost no trabalho. Um dos meus primeiros trabalhos foi o Boost, e eu nem sabia como funciona lá, por que funciona assim.


Paul: Boost é um pouco de uma biblioteca de mágica até agora.


Anton: E comecei a olhar, entender e, em algum momento, percebi de repente que aqui no lexical_cast você pode fazer melhor. Então eu escrevi para o mantenedor, Alexey, do lexical_cast , vamos aplicar esse patch, mas ele não me respondeu. Escrevi para ele mais dois ou três adesivos.


Pavel: Se bem me lembro, você deve ser assertivo ao promover seus patches.


Anton: Claro. Com código aberto sempre. Como resultado, o mantenedor disse que está costurando completamente agora, ele tem muito o que fazer e se ofereceu para se tornar um mantenedor de lexical_cast mim. Fiquei encantado e concordou. E então Boost.Any, Boost.Variant Desliguei-me lentamente. Nesse momento, ele escreveu algumas de suas bibliotecas, Boost.TypeIndex, Boost.Stacktrace, que agora são aceitas como padrão.


Pavel: Onde você obtém idéias para novos recursos em bibliotecas prontas?


Anton: Algumas coisas, por exemplo, Boost.DLL - essa pessoa escreveu para a lista de email do Boost, eles dizem, olha, que biblioteca legal eu tenho, ela faz muitas coisas muito assustadoras, complexas e interessantes. Eu olhei para ela assim: “Bem, sim, sim, sim, mas eu gostaria disso!” Entrei em contato com esse cara e sugeri que eu pegasse algumas peças para trabalhar com plugins separadamente. Eles o retiraram separadamente, e descobriu-se que essa peça entrou no Boost muito antes do que o próprio homem faz. Com o Stacktrace, em algum momento percebi que não havia mecanismo para obter o Stacktrace. Sim, às vezes me atinge lentamente. E foi nesse momento que percebi que, para os profissionais, não há como obter o Stacktrace.


Pavel: Parece que em dois trabalhos diferentes escrevi uma biblioteca semelhante duas vezes para imprimir vestígios de pilha no outono.


Anton: E então eu peguei, tentei, joguei para o pessoal da Boost, eles disseram que não, não vai fazer isso. Então eu tentei mais duas vezes, e aqui está uma das versões, ela organizou tudo e criou raízes.


Pavel: Mas você o usa de alguma forma no seu trabalho?


Anton: Sim, nós da Yandex.Taxi estamos ativamente usando o Boost.Stacktrace, é muito bom com as mesmas ações, por exemplo. Você tem algo em comum - trabalhar com JSON, digamos. Em algum momento, o usuário acessa o campo JSON que não está lá. Basta lançar uma exceção? Bem, em algum lugar acima dele vai pegar. Em geral, o usuário para onde ligou? Lá, em todo o código para trabalhar com JSON, o usuário tem o campo exato em que não o alcançou? Em que momento ele solicitou? E o Stacktrace ajuda perfeitamente a entender o que e onde está errado, onde o usuário errou.


Pavel: Geralmente, as versões que você usa no trabalho começam a se dispersar com o que está em código aberto? Ou você está constantemente tentando transferir recursos para frente e para trás?


Anton: Transfero recursos para frente e para trás. Claro, com a permissão da liderança. E direi que essa é uma interação muito útil. Por exemplo, no Yandex.Taxi, notamos que a função toString () do Stacktrace está ausente. Está na proposta de padronização, é descrito em todos os lugares, mas não está no Boost. Apesar de me parecer que ela estava lá, rasguei toda a proposta de padronização da Boost. Adicionado ao Boost. Todo mundo está feliz.


Pavel: A propósito, retornando ao grupo de trabalho. Provavelmente, você vai imediatamente para a próxima reunião depois do C ++ Siberia?


Anton: Sim, vou embarcar no avião amanhã de manhã, com 40 horas de voo e no mesmo dia voarei para Kona. Na agenda da reunião, todo o comitê precisa decidir como será o C ++ 20. O que entrará nele. A última parada antes do C ++ 20 permanecerá apenas uma correção de bug. Módulos e corotinas estão na agenda agora.


Pavel: Duas características importantes sobre as quais existem longos e ardentes debates.


Anton: Tudo é mais ou menos claro com os módulos, eles parecem ser aceitos, mas com corotinas é completamente incompreensível, porque apenas nesta reunião a terceira proposta concorrente de corotinas apareceu. É completamente diferente, completamente diferente do que está no TS Coroutines, e há pontos fortes. Existem, é claro, os fracos. Não está claro como será. E como geralmente as pessoas estão sintonizadas com corotinas.


Pavel: Quais são seus planos para o próximo C ++ na Rússia? Você quer um relatório seu?


Anton: Sim, definitivamente. Eu vou inventar alguma coisa. Talvez sobre Pilorama.


Sergey: Bem, muito obrigado, amigos! Eu não vou mais te segurar. Tchau pessoal! Vejo você em C ++ Rússia .


Algumas palavras sobre os treinamentos na conferência C ++ Russia


Como Pavel disse corretamente nesta entrevista, treinamentos e master classes têm uma vantagem inegável: o moderador tem a oportunidade de trazer todo o tópico dentro de algumas horas, em vez de tentar manter-se dentro de 50 minutos, como em um relatório regular.


Lentamente, as master classes estão se tornando uma tradição. Nós os realizamos pela primeira vez em 2017, depois os testamos no C ++ Siberia. Este ano haverá três master classes. Você já conheceu os líderes de dois deles nesta entrevista.


Uma aula de mestrado é de seis horas, combinando informações teóricas e exercícios práticos. Um pequeno número de participantes fornece trabalho individual a cada um. Isso é, antes de tudo, é claro, prática. Portanto, todas as classes master exigirão um laptop com o compilador C ++ moderno instalado.


Três master classes foram oferecidas para escolher: “A programação funcional aplicada em C ++” será conduzida por Ivan Čukić, e “Integração contínua para desenvolvedor de C ++” e “C ++ inteligente e moderno” serão o trabalho de nossos desenvolvedores, Pavel Filonov e Anton Polukhin.


A master class de Ivan não é para o nível básico, será adequada para os intermediários que desejam abrir mais as portas da percepção. Ivan é pesquisador da Universidade de Belgrado, mantenedor do KActivities, daemon Contour, Lancelot e outros projetos do KDE. Será, como você pode entender, sobre programação funcional. Por precaução, os participantes são aconselhados a ter as versões mais recentes do GCC e Clang. Um pouco mais tarde, apresentaremos uma imagem do VirtualBox com tudo o que você precisa. Os seguintes tópicos serão abordados na classe principal: o STL está longe de ser uma programação funcional, o que são objetos funcionais, std :: invoke e mônadas, mônadas, mônadas. E mais algumas mônadas.


Você já está familiarizado com este pesquisador desenvolvedor da Kaspersky Lab Pavel Filonov . Ele convidará os participantes a construir seu IC com conan e travis. Pavel também explicará o método de integração contínua e, na parte prática, ele ensinará a resolver problemas usando exemplos de um projeto / trabalho doméstico em código aberto e um projeto de trabalho com código fonte fechado.


Naturalmente, você deve poder programar em C ++, trazer um laptop com qualquer sistema operacional, um dos principais compiladores, cmake fresco (você precisa entender a sintaxe de CMakeLists.txt), git, python 3 e pip3 e várias contas. Mais detalhes sobre isso estão na descrição do site .


E, finalmente, uma master class de antoshkka é dedicada às habilidades de otimização adequada. Só para lembrar, ele é um desenvolvedor sênior do serviço Yandex.Taxi, representante do WP 21 em reuniões internacionais do comitê de padronização C ++, autor de propostas aceitas para um padrão de linguagem, desenvolvedor de Boost etc. Anton considerará exemplos com erros frequentes de otimização prematura; os participantes considerarão algoritmos e complexidades da biblioteca padrão, contêineres com recursos, semântica Move e seu comportamento inesperado, multithreading. Como o curso é prático, todos os tópicos serão investigados experimentalmente usando a biblioteca C ++ para obter os benchmarks do Google. Para o curso, você precisará apenas de conhecimentos básicos de C ++ e do compilador mais recente, com suporte ao C ++ 11.


Todas as opções acima são, obviamente, apenas uma breve referência para sua referência. A única fonte verdadeira de verdade é o local da conferência , onde tudo é detalhado e claramente indicado. Por exemplo, lista claramente o software necessário no seu laptop, juntamente com suas versões.


A Conferência C ++ Rússia será realizada de 19 a 20 de abril de 2019 em Moscou. Os ingressos podem ser adquiridos no site oficial . Importante: a partir de 1º de março, os preços dos ingressos aumentarão. Se você deseja comprar a preços de fevereiro, deve fazê-lo agora.

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


All Articles