Este hubpost reúne os dez principais relatórios de palestrantes como Nicolai Josuttis, Timur Doumler, Andrey Davydov e muitos outros.
C ++ 17/20/23, conceitos, estruturas de dados imutáveis, concorrência, paralelismo, metaprogramação - todos esses são os tópicos da conferência C ++ Russia 2019 realizada nesta primavera em Moscou. Mais de seiscentos participantes, renomados palestrantes internacionais, relatórios detalhados. Observe: os relatórios são tais que ficarão desatualizados muito em breve, e você pode aplicar o conhecimento adquirido mesmo agora.

O formato é o seguinte:
- Vídeo obrigatório do YouTube
- Uma descrição detalhada do relatório em russo (com slides, se houver)
- Breve biografia do orador
Sinta-se livre para escrever comentários! A propósito, na lista de reprodução publicada sob o corte, não há apenas os 10 melhores. E desativamos os anúncios no YouTube, para que ninguém interfira.
Todos os relatórios variam de "júnior" a "sênior" na classificação, mas as diferenças entre os lugares entre os dez primeiros são mínimas e dependem fortemente da metodologia de avaliação. Alterando ligeiramente a metodologia, você pode mudar bastante de lugar. Então assista tudo!
A lista de reprodução completa da conferência está aqui .
Viktor Kirilov
Slides
O C ++ é conhecido por seu desempenho, velocidade, falta de um sistema de compilação e gerenciador de pacotes padrão, além da complexidade e duração da compilação. A impossibilidade de desenvolvimento iterativo rápido é um dos maiores responsáveis pela produtividade do desenvolvedor. Este relatório é destinado a todos que desejam melhorar os três últimos pontos: primeiro, algumas idéias de por que a compilação e a vinculação levam tanto tempo; depois, uma lista de técnicas e ferramentas para resolver o problema, por exemplo:
- ajuste e infraestrutura - hardware, sistemas de montagem, armazenamento em cache, montagens distribuídas, diagnóstico de gargalo, higiene de código;
- técnicas - construção da unidade, cabeçalhos pré-compilados, estático versus compartilhado;
- mudanças nas fontes - idioma PIMPL, uso mais correto de modelos, anotações;
- módulos - o que é quando aparecem em C ++, o que será mais desnecessário por causa disso.
Sobre o palestrante
Seis anos de experiência profissional em C ++ nas indústrias de jogos e efeitos visuais. Agora Victor está desenvolvendo código-fonte aberto e, de tempos em tempos - o contrato normal de trabalho. Uma das últimas tarefas interessantes é a implementação do código de troca a quente no tempo de execução do Nim. Ele também é o autor do doctest, "a biblioteca de teste de cabeçalho único mais rápida e poderosa para C ++". Ele está interessado em desenvolver jogos e mecanismos de jogos, código de alto desempenho, criptomoedas, otimizar o fluxo de trabalho e integrar boas práticas de desenvolvimento, como modernas ferramentas de análise estática e instrumentação. Victor mora em Sofia (Bulgária), e a programação é tanto sua profissão quanto seu hobby. Tenha seu próprio site: http://onqtam.com/
Sergey Fedorov
Slides
Quando trabalhamos com bancos de dados, geralmente obtemos buffers brutos, enquanto queremos receber dados na forma de estruturas, classes e contêineres em C ++.
Uma história sobre o design e a implementação do driver PostgreSQL com uma interface humana usando quase todas as ferramentas de linguagem C ++ 17 atualmente disponíveis.
A abordagem descrita no relatório pode ser adaptada a quase qualquer protocolo no nível do aplicativo.
Sobre o palestrante
Sergey Fedorov, desenvolvedor líder do Yandex.Taxi, está desenvolvendo uma estrutura assíncrona para o back-end do Taxi. Um grande fã de metaprogramação e código aberto.
Ivan Čukić
RAII libera os recursos capturados. Mas há um recurso que não pode ser retornado - é hora.
Um dos erros mais demorados é a criação de cópias desnecessárias. A semântica do C ++ 11 Move deu um passo na direção certa. Ele permite que você forneça dados desnecessários a outra pessoa sem multa para criar uma cópia e sem o risco de correr de acordo com os dados quando os dados tiverem muitos usuários.
Nesta palestra, participaremos de uma discussão de uma abordagem de arquitetura que só permite o uso de tipos especiais, impossíveis de copiar e realocáveis, chamados tipos lineares. Discutiremos os recursos do C ++ que nos permitirão forçar o uso de apenas esses tipos.
Para isso, propõe-se o uso de conceitos de C ++ 20, && - funções qualificadas, etc.
Sobre o palestrante
Ivan Chukich é o autor de Programação Funcional em C ++, publicado por Manning. O colaborador do KDE é um dos maiores projetos de código aberto de código aberto. Além disso, ele ensina técnicas modernas de programação na universidade, transferindo para seus alunos seus 20 anos de experiência no uso de C ++. Ele estudou programação funcional em C ++ durante e antes do pós-doutorado e usou essas técnicas em projetos do mundo real.
Rainer Grimm
O que é comum entre threads, átomos, mutexes e variáveis condicionais? Todos esses são os blocos básicos para criar aplicativos multiencadeados em C ++ e podem causar problemas, mesmo para desenvolvedores experientes em C ++.
Essa situação mudou drasticamente no C ++ 17 e, mais ainda, no C ++ 20/23. A partir do C ++ 17, a maioria dos algoritmos padrão está disponível em forma serial, paralela e vetorizada. Nos padrões mais recentes, esperamos executores e memória transacional, podemos esperar grandes melhorias em futuros e corotinas. Para multithreading e simultaneidade, este é apenas o começo. Espera-se que, no futuro, somente eles (executores, memória transacional, futuros, corotinas) sejam usados em abstrações, e threads, átomos, mutexes e variáveis condicionais se tornem apenas detalhes de implementação.
O objetivo deste relatório é ver o que já recebemos em C ++ 17 e o que podemos esperar em C ++ 20/23.
Sobre o palestrante
Rainer Grimm trabalha como arquiteto, líder de equipe e instrutor há cerca de 20 anos. Em seu tempo livre, ele gosta de escrever artigos sobre C ++, Python e Haskell e falar em conferências, muitas vezes escreve em seu blog “Modern C ++”. Atualmente, ele lidera seminários sobre C ++ e Python modernos. Seus livros C ++ 11 para Programmierer, C ++, C ++ Standardbibliothek e The C ++ Standard Library são publicados por O'Reilly e Leanpub.
Andrey Davydov
Qualquer programador que tenha mergulhado no mundo do C ++ sabe que os modelos estão completos, "a falha na substituição não é um erro" e, em tempo de compilação, você pode fazer coisas incríveis e às vezes até úteis. Por outro lado, um desenvolvedor experiente de C ++ entende que “você pode” não significa “você precisa” e que você deve pagar pelo abuso da metaprogramação. Uma das principais restrições é o tempo de compilação, razão pela qual o relatório discute quais operações / técnicas são mais caras do ponto de vista do compilador e como evitá-las.
Em particular, os seguintes problemas foram destacados:
- por que SFINAE é a última coisa a usar;
- por que std :: conditional_t é definido ineficientemente;
- qual é a diferença entre implementações de tupla no Microsoft STL e libc ++;
- quando usar std :: {conjunção, disjunção} e quando usar expressões de dobra;
- por que você não deve usar std :: void_t;
- como os conceitos que aparecem no C ++ 20 podem ajudar.
Sobre o palestrante
Nos últimos 3 anos, Andrey trabalhou na equipe ReSharper C ++ da JetBrains. No passado, ele se engajou em programação industrial em áreas relacionadas a GIS e sistemas de visualização em 3D.
Anton Polukhin
Cada nova linguagem de programação se esforça para afirmar que é mais rápida, mais confiável e, em todos os aspectos, várias vezes melhor que o C ++.
Vamos ver - onde está a verdade e onde está a ficção. Que comece a batalha entre C ++ e Asm / Rust / Go / Java / C # ...!
Sobre o palestrante
Representante da Rússia na ISO em reuniões internacionais do grupo de trabalho sobre padronização C ++. O autor de várias propostas aceitas para o padrão da linguagem C ++.
Autor das bibliotecas Boost TypeIndex, DLL, Stacktrace e mantenedor ativo Any, Conversion, LexicalCast, Variant.
Ele é o autor do Boost C ++ Application Development Cookbook e Second Edition.
Juan Pedro Bolívar Puente
O C ++ Elite fala sobre semântica, imutabilidade e compartilhamento de valores, comunicando-se há anos. Estamos esperando um mundo melhor, sem mutexes, raças, observadores, padrões de "equipes" e todo esse jazz. Quando se trata de praticar, existem grandes problemas. Um dos principais problemas está nas estruturas de dados.
Estruturas de dados imutáveis não alteram valores para trabalhar com elas - você precisa criar novos valores. Os valores antigos permanecem como estão e, portanto, você pode trabalhar com eles a partir de vários threads sem bloquear. Isso nos dá uma separação estrutural de recursos, porque valores novos e antigos podem usar os mesmos dados comuns - eles podem ser comparados rapidamente e muito desfazer o histórico armazenado de forma muito compacta. É por isso que eles são tão agradáveis de usar em sistemas interativos e multiencadeados: simplificam a arquitetura do software de desktop e permitem que os servidores aumentem sua escala. Esse é o ingrediente secreto que determinou o sucesso de Clojure e Scala, e até os desenvolvedores de JavaScript gostam de usá-lo com algo como o Immutable.js do Facebook.
Juan apresenta o Immer, uma biblioteca C ++ que implementa estruturas de dados modernas, eficientes e imutáveis.
Nesta palestra, ele falou sobre os benefícios arquitetônicos da imutabilidade e mostrou como um vetor persistente extremamente eficiente e poderoso pode ser construído sobre estruturas de dados modernas levadas à perfeição (Árvores Balanceadas de Raios Relaxadas). Vimos um exemplo de programa - um editor de texto projetado em um estilo arquitetônico. O código não é apenas super-simples, mas também superou a maioria dos programas similares em desempenho. Não acredita? Abra o relatório e veja por si mesmo!
Tecnologias utilizadas:
Sobre o palestrante
Juan é consultor e engenheiro freelancer de Berlim, especializado em design orientado a valor, software interativo, C ++ moderno, programação funcional e uso estratégico de código aberto. Antes disso, ele trabalhou na Ableton e esteve envolvido em vários projetos relacionados à música. Ele também participou do projeto GNU e co-fundou o Hacklab em Granada.
Andrey Davydov
Os conceitos que aparecem no C ++ 20 são um tópico longo e amplamente discutido. Apesar do excesso de material acumulado ao longo dos anos (incluindo os discursos de especialistas de classe mundial), ainda existe confusão entre os programadores aplicados (que não dormem diariamente com o padrão) quais são e são os conceitos de C ++ 20 precisamos se houver enable_if verificado ao longo dos anos. Em parte, a falha é como os conceitos evoluíram ao longo de ~ 15 anos (Conceitos Completos + Mapa de Conceitos -> Conceitos Lite), e em parte porque os conceitos acabaram sendo diferentes de ferramentas semelhantes em outras linguagens (limites genéricos Java / C #, traços de ferrugem, ... )
O relatório começa com uma breve visão geral das inovações relacionadas ao conceito do C ++ 20, após as quais analisamos a implementação de algumas classes e funções do STL, comparando as soluções C ++ 17 e C ++ 20. Por exemplo:
- para implementar std :: optional agora você precisa usar a hierarquia de herança da profundidade 7, em C ++ 20 não será necessário;
- para o construtor padrão std :: pair agora requer 2 funções de modelo, em C ++ 20 - 1 não modelo;
- frequentemente, as classes de modelo se especializam parcialmente; no caso em que os parâmetros do modelo têm algumas propriedades especiais, é mais conveniente e mais correto fazer isso com conceitos.
O público deve ter uma idéia geral do que são conceitos e SFINAE. A familiaridade com a biblioteca C ++ padrão também será útil, pois não é necessário conhecimento dos meandros e detalhes da implementação.
Sobre o palestrante
Nos últimos 3 anos, Andrey trabalhou na equipe ReSharper C ++ da JetBrains. No passado, ele se engajou em programação industrial em áreas relacionadas a GIS e sistemas de visualização em 3D.
Timur Doumler
É sabido que a semântica de inicialização é uma das partes mais complexas do C ++. Existem muitos tipos de inicialização, descritos por sintaxe diferente, e todos interagem de maneira complexa e desafiadora. O C ++ 11 trouxe o conceito de "inicialização universal". Infelizmente, ela introduziu regras ainda mais complexas e, por sua vez, elas foram bloqueadas no C ++ 14, C ++ 17 e alteradas novamente no C ++ 20.
Neste relatório, Timur primeiro resumiu os resultados históricos da evolução da inicialização em C ++. Ele deu uma visão geral sistemática da versão atual da regra de inicialização, problemas típicos e surpresas. Introduziu regras práticas sobre como usar todas essas regras efetivamente. E, finalmente, Timur falou sobre as últimas propostas do padrão, o que pode tornar a semântica da inicialização do C ++ 20 um pouco mais conveniente.
Sobre o palestrante
Timur é um desenvolvedor de C ++ especializado em som e música, membro do comitê ISO C ++, diretor de programa da Audio Developer Conference (ADC). Ele se esforça para escrever código limpo, desenvolvendo boas ferramentas, promovendo a evolução da linguagem C ++ e construindo comunidades inclusivas.
Nicolai josuttis
O C ++ 17 é uma enorme combinação de novos recursos pequenos, tanto na linguagem quanto na biblioteca. Esses recursos não apenas permitem que você faça mais coisas novas, mas também fornecem novas maneiras de fotografar nas pernas - com muito mais frequência do que o esperado. Isto não é uma teoria. Isso acontece na vida real, aqui e agora.
Neste relatório, Nikolai resolveu todas essas armadilhas, discutiu as razões por trás de suas idéias e arquitetura e deu instruções sobre como contornar problemas. Como efeito colateral, você pode dar uma olhada mais profunda nos novos recursos do C ++ 17.
Sobre o palestrante
Nikolay é arquiteto de sistemas independente, gerente técnico, autor e consultor. Ele desenvolve sistemas de software de médio e grande porte para telecomunicações, finanças e manufatura.
Ele é amplamente conhecido na comunidade por seus relatórios e pelo fato de escrever livros sobre C ++ ( The C ++ Standard Library e C ++ Templates ), fala sobre novos recursos da linguagem.
Por 20 anos, ele é um membro ativo do Comitê de Normalização C ++.
Uma lista de reprodução completa com todos os relatórios está disponível aqui . Lembramos que o novo C ++ Rússia já está a caminho e será realizado de 31 de outubro a 1 de novembro de 2019 em São Petersburgo. Os ingressos podem ser adquiridos no site oficial .