Os 10 principais documentos da conferência CoreHard Autumn 2019 de C ++



O CoreHard é uma conferência C ++ realizada em Minsk duas vezes por ano, na primavera e no outono. Desde 2015, passamos de uma pequena comunidade de entusiastas para uma grande conferência regional. Tentamos combinar o conhecimento de mestres reconhecidos do mundo C ++ com o desenvolvimento do movimento local C ++, atraindo ativamente palestrantes de empresas locais da Bielorrússia, da Rússia e da Ucrânia.

Estamos com pressa de compartilhar com os residentes de Khabrovsk os 10 melhores vídeos recém-assados ​​da nossa recente conferência barulhenta .

Então, vamos lá: os 10 principais relatórios classificados pelos espectadores.

10. Modelo de memória excepcional - Alexey Tkachenko


O conceito de memória em um computador vai muito além do escopo de um conjunto de chips de memória dinâmica "de ferro" instalados em um computador. A memória há muito tempo é percebida como um espaço endereçável, gerenciado pelo módulo de gerenciamento de memória - MMU. Essa abordagem nos permite distinguir entre memória física e memória virtual, usada ativamente em todos os sistemas operacionais que usam o conceito de processo como uma unidade de gerenciamento de recursos.

No relatório, falaremos sobre algumas aplicações incomuns de métodos de proteção implementados na MMU, ou seja, maneiras de simular a interação do hardware com o processador central através de arquivos de registro.

O relatório cobrirá os sistemas operacionais Windows e Linux e várias arquiteturas.
O relatório será de interesse principalmente para desenvolvedores de software incorporado (incorporado), no entanto, as técnicas descritas no relatório serão úteis para desenvolvedores de computadores "grandes".


Sobre o palestrante

Por mais de 12 anos, Alexey Tkachenko desenvolve software para testes de hardware e complexos de bancada de produtos de tecnologia espacial na empresa Peleng. Ferramentas básicas de trabalho: C ++ para tarefas de baixo nível e interação com hardware e C # /. NET para software cliente. Nas horas vagas, gosta de Embedded em modestos microcontroladores.



9. Truques de táxi em C ++ - Anton Polukhin


Ao escrever estruturas grandes, é preciso lidar com tarefas típicas pelas quais as soluções são conhecidas há muito tempo. No entanto, essas soluções não são eficazes o suficiente e muito melhor pode ser feito.

No relatório, falaremos sobre pimpl compatível com cache, otimizando o registro de tipos de usuários, convertendo de JSON / XML / YAML para tipos de usuários e outras técnicas interessantes.


Sobre o palestrante

Anton Polukhin é o 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 ++. O 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.



8. C ++ 20: As pequenas coisas - Timur Doumler


O C ++ 20 traz ótimos novos recursos para a linguagem: módulos, corotinas, conceitos, operador de espaçonave e muitas novas bibliotecas. No entanto, o C ++ 20 também adiciona muitas pequenas melhorias, tornando o C ++ mais poderoso e expressivo, além de mais seguro e holístico.

Neste relatório, examinaremos pequenas melhorias no núcleo da linguagem que podem ajudar a facilitar a vida do programador: expressões lambda, CTAD, ligações estruturadas, inicialização e muito mais.


Sobre o palestrante

Timur Doumler é desenvolvedor de C ++ especializado em tecnologia de processamento e síntese de som, membro ativo do comitê de padronização ISO C ++ e ativista da comunidade #include <C ++>.



7. Buscando a baixa latência final - Mateusz Pusz


Neste relatório, vamos dar uma olhada no mundo C ++ através do domínio de baixa latência. Este é um mundo no qual alocações e exceções de memória dinâmica não são bem-vindas, onde podemos não ter contêineres STL suficientes e onde os desenvolvedores geralmente precisam descer para o nível do assembler para garantir que o código realmente faça exatamente o necessário da maneira ideal.


Sobre o palestrante

Mateusz Pusz é arquiteto, engenheiro e especialista em segurança, consultor, professor e evangelista de C ++ moderno. Membro dos grupos de trabalho WG21 e SG14 do Comitê de Normalização C ++.



6. Windbg: quando não jogamos - Alexander Golovach


Na prática de programação, surgem frequentemente problemas que não podem ser reproduzidos e investigados no lado do desenvolvedor. Em tais situações, às vezes é impossível até organizar o acesso remoto à máquina. O relatório discutirá e fornecerá dicas sobre a depuração de tarefas típicas, como falhas, vazamento de recursos e erros de sincronização em aplicativos multithread, usando o depurador Windbg como exemplo. O relatório será de interesse principalmente para desenvolvedores iniciantes que trabalham com a plataforma Windows.


Sobre o palestrante

Alexander Golovach é um programador de sistema Windows, desenvolvedor do Checkpoint Endpoint Security. Ele participou da criação de produtos como Anti Exploit, Anti Ransomware e Endpoint Forensics.



5. Como o back-end do LLVM em C # funciona - Egor Bogatov


O LLVM contém um grande número de otimizações e é adequado como back-end para muitas linguagens de programação. Mas as coisas ficam um pouco complicadas para idiomas gerenciados e scripts JIT. Neste relatório, o Yegor falará sobre as dificuldades enfrentadas pelos desenvolvedores de C # ao implementar o back-end do LLVM.


Sobre o palestrante

Egor Bogatov trabalha na equipe .NET / Mono da Microsoft, está interessado em microoptimizações e LLVM.



4. Estudos sobre buffer: alertas assíncronos, replicação de atualizações, consolidação de solicitações pendentes - Vadim Vinnik


A prática de desenvolver um aplicativo específico pode levar a uma declaração do problema, que, no pensamento maduro, acaba sendo geral o suficiente para isolá-lo em uma abstração potencialmente útil para muitos aplicativos diferentes. Trazer uma solução para uma forma adequada para uso repetido, em contraste com uma solução que atenda às necessidades de um aplicativo específico, requer um esforço mental adicional para destacar os aspectos variacionais do problema e modelá-los usando a linguagem. O relatório apresenta a experiência de implementar três abstrações, unidas por um tema comum - buffer de dados no processamento multithread. A linha de pensamento da análise da tarefa à implementação por meio da linguagem C ++ 17 é mostrada.


Sobre o palestrante

Vadim Vinnik é candidato a ciências físicas e matemáticas, 10 anos de experiência no ensino de programação para estudantes, inclusive na Universidade Nacional Taras Shevchenko de Kiev. Mais de 10 anos de experiência em programação industrial (principalmente em C / C ++ / C #), com foco em domínios de backup e recuperação de dados. Vadim - autor dos livros “Linguagens Algorítmicas e Fundamentos de Programação: Linguagem C”, “Fundamentos de Programação Orientada a Objetos em C ++”; autor de 29 publicações científicas sobre teoria da programação; tradutor do inglês para o russo dos livros “Princípios de Programação Orientada a Objetos” (Anton Eliens), “Combinando Teorias de Programação” (Charles Hoar, Hee Jifen). Áreas de interesse: programação em C ++ e linguagens funcionais (Haskell).



3. SQL estático em C ++ 14 - Evgeny Zakharov


O palestrante falará sobre o desenvolvimento da biblioteca da biblioteca ORL sqlite_orm para SQLite3 no C ++ 14 e compartilhará sua experiência na tentativa de criar um ORM com o qual você pode esquecer as consultas de texto e como ele se adapta ao C ++ usando modelos.


Sobre o palestrante

Evgeny Zakharov é desenvolvedor de jogos em C ++, autor da biblioteca sqlite_orm.



2. Metaprogramação: construindo uma máquina de estados finitos - Sergey Fedorov


A implementação manual de máquinas de estado usando um caso de comutação ou herança com funções virtuais consome muito tempo e é suscetível a erros. No relatório, o palestrante fala sobre a biblioteca de máquinas de estado AFSM (Outra Máquina de Estado Finito), que permite usar uma linguagem declarativa para descrever a máquina de estado. E também sobre pequenos truques e truques de metaprogramação em exemplos do código desta biblioteca.


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.



1. Protegendo C ++ - Pavel Filonov


O C ++ é frequentemente comparado com nunchakus: em mãos habilidosas é uma ferramenta eficaz e, nas mãos de um iniciante, existe um perigo para a própria saúde. Essa comparação é obviamente inspirada na opinião do C ++ como uma linguagem de programação insegura. Alguns novos idiomas até usam essa opinião para sua própria promoção. Mas que perigos específicos existem por trás do termo "inseguro"? A resposta detalhada obviamente levantará várias direções, uma das quais será a segurança cibernética. O relatório abordará exemplos simples de exploração de vulnerabilidades no código C / C ++: execução de código de shell na pilha, retorno à libc, reescrita de vptr, estouro de pilha.

Mas a ênfase principal está na proteção contra esses ataques: um canário na pilha, ASLR, áreas impossíveis, testes e desinfetantes, difusos, processos SDL.


Sobre o palestrante

Pavel Filonov participou do desenvolvimento dos sistemas Max Patrol SIEM como desenvolvedor de C ++ e da Kaspersky MLAD como cientista de dados. Membro do comitê de programa da conferência C ++ Rússia. Especializado em tópicos de CI / ML / desempenho.



E também, alguns relatórios de bônus!

Automatize - Kirill Tikhonov


Escreveremos o serviço Web mais simples do cliente e servidor em C ++. Nesta parte do C ++ terminará, e a configuração do ambiente e da infraestrutura continuará. Garantiremos a determinabilidade da montagem e a execução do teste. Facilitar a atualização subsequente de bibliotecas dependentes. Automatizamos verificações estáticas, verificação de código e execução de testes. Garantimos a disponibilidade do serviço, configuramos a infraestrutura, equilibramos a carga e adicionamos escala automática e manual. E, no final, configuraremos a entrega contínua para que o código entre em produção 5 minutos após a solicitação, enquanto alterações inválidas e erros de programador não poderão afetar seu trabalho.


Você ainda escreve código com as mãos? Então vamos até você! - Sergey Sadovnikov


No mundo do desenvolvimento de C ++, há muitas tarefas nas quais você precisa escrever uma grande quantidade de código padrão: serialização, RPC, ORM, ligações de linguagem de script etc. etc. E, é claro, existem muitas abordagens que simplificam a criação desse código para, por exemplo, para serialização: escreva tudo com as mãos, coloque tudo em macros, arraste os modelos liderados por Hana, combine um com o outro. Mas há uma abordagem que deve substituir todas as outras: geração de código. json, bson, xml, yaml, protobuf - existem muitas opções para formatos nos quais você pode salvar dados. Cada formato tem suas próprias bibliotecas, e não uma. As bibliotecas oferecem persistentemente sua própria maneira de descrever dados, e algumas oferecem uma infraestrutura inteira para a qual você precisa se adaptar e ajustar seu código. E isso nem sempre é conveniente, pois se quer liberdade. Gostaria que o texto de origem dependesse o mínimo possível de como os dados são serializados. E os meios modernos de geração de código podem fornecer essa liberdade, você só precisa saber como usá-los corretamente.


O desastre da vida útil do C ++ rvalue - Arno Schödl


Os links de valor estão presentes no idioma desde o C ++ 11. Eles foram introduzidos para tornar os objetos em movimento mais eficientes. Juntamente com essas otimizações, essa inovação traz muitas nuances à linguagem que todo programador que se preze deve conhecer. Vamos mergulhar no mundo dos links de valor e examiná-los cuidadosamente!


Exceções de C ++ através do prisma de otimização de compilador - Roman Rusyaev


No quintal, é o século 21, a implementação improdutiva do tratamento de exceções em C ++ com base em setjmp / longjmp já está no passado. Compiladores modernos, como gcc e clang, usam uma implementação avançada de exceções em C ++, chamada manipulação de exceção de custo zero. Mas quão verdadeiro é esse custo zero? Sim, pagamos aumentando o tamanho do arquivo binário e também no caso em que a exceção é realmente lançada, iniciando o processo de desenrolamento da pilha, chamando destruidores para objetos locais, etc. Mas perdemos o desempenho se uma exceção não é lançada? Existem restrições nas otimizações do compilador? Este relatório descreve como as exceções do C ++ afetam as otimizações do compilador. Quais otimizações não podem ser aplicadas se a função gerar exceções e quais otimizações se tornam mais difíceis de aplicar. Exemplos de implementação de exceções e otimizações do compilador são considerados com base no LLVM. O relatório tem como objetivo fornecer às pessoas um entendimento de quando faz sentido criar seu aplicativo com -fno-exceptions e quando você pode aproveitar todas as delícias de usar exceções em C ++, sabendo que o código deles não perdeu significativamente o desempenho em comparação com o código em que as exceções estão desabilitadas.


Geradores, corotinas e outras doçuras que desenrolam o cérebro - Adi Shavit


O C ++ 20 nos trouxe as corotinas e com elas a capacidade de escrever geradores, tipos iteráveis ​​e intervalos. Veremos como as corotinas ajudam a escrever código mais limpo e legível, com abstrações e generalizações mais leves.


Como não engasgar com um grande projeto antigo - Yuri Minaev


O mundo mudou. O que funcionou antes não parou de funcionar, mas se tornou insuficiente. A programação em pares, as revisões de código e os testes de unidade ainda são importantes e necessários, mas não podem mais fornecer o nível adequado de qualidade e confiabilidade dos projetos C ++. Muitos projetos cresceram centenas de vezes. O crescimento foi gradual e nem todo mundo entendeu o que havia acontecido. Qualquer projeto antigo grande consiste em camadas heterogêneas (depósitos geológicos) e, mais importante, ninguém já sabe como tudo funciona. Chegou a hora de ferramentas e metodologias para ajudar a manter a qualidade e a integridade do código: DevSecOps, análise estática, análise dinâmica, plataformas de medição de qualidade.


Como ajudar e como evitar o compilador - Andrey Oleinikov


Como regra, você pode confiar no fato de que o compilador otimiza o arquivo binário resultante para que ele funcione o mais rápido possível. Mas o compilador não sabe em quais dados e em qual hardware o programa será lançado. Além disso, gostaria que a compilação levasse um tempo aceitável. Por esse motivo, o resultado pode ser abaixo do ideal. Sugiro usar exemplos para o LLVM para ver como você pode dizer ao compilador como otimizar o programa e tornar o resultado melhor ou pior.


O próximo CoreHard (C ++ CoreHard Spring 2020 Conference) está a caminho e será realizado de 10 a 11 de abril de 2020 em Minsk, procure ingressos e o programa completo no site oficial.

E você pode enviar um relatório aqui (life hack: o orador não pode pagar pelo ingresso!)

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


All Articles