Los 10 mejores documentos de conferencia C ++ CoreHard Otoño 2019



CoreHard es una conferencia de C ++ que se celebra en Minsk dos veces al año, en primavera y otoño. Desde 2015, hemos pasado de ser una pequeña comunidad de entusiastas a una importante conferencia regional. Intentamos combinar el conocimiento de maestros reconocidos del mundo de C ++ con el desarrollo del movimiento local de C ++, atrayendo activamente oradores de empresas locales de Bielorrusia, Rusia y Ucrania.

Tenemos prisa por compartir con los residentes de Khabrovsk los 10 mejores videos recién horneados de nuestra conferencia recientemente ruidosa .

Entonces, vamos: los 10 mejores informes calificados por los espectadores.

10. Modelo de memoria excepcional - Alexey Tkachenko


El concepto de memoria en una computadora va mucho más allá del alcance de un conjunto de chips de memoria dinámica "de hierro" instalados en una computadora. La memoria se ha percibido durante mucho tiempo como un espacio direccionable, que es administrado por el módulo de administración de memoria - MMU. Este enfoque nos permite distinguir entre memoria física y memoria virtual, que se utiliza activamente en todos los sistemas operativos que utilizan el concepto de un proceso como unidad de gestión de recursos.

En el informe, hablaremos sobre algunas aplicaciones inusuales de métodos de protección implementados en la MMU, a saber, formas de simular la interacción del hardware con el procesador central a través de archivos de registro.

El informe cubrirá los sistemas operativos Windows y Linux, y varias arquitecturas.
El informe será de interés principalmente para los desarrolladores de software embebido (Embebido), sin embargo, las técnicas descritas en el informe serán útiles para los desarrolladores de computadoras "grandes".


Sobre el orador

Durante más de 12 años, Alexey Tkachenko ha estado desarrollando software para pruebas de hardware y software y complejos de productos de tecnología espacial en la empresa Peleng. Herramientas de trabajo básicas: C ++ para tareas de bajo nivel e interacción con hardware y C # /. NET para software de cliente. En su tiempo libre le gusta Embedded en microcontroladores modestos.



9. Trucos de taxi C ++ - Anton Polukhin


Al escribir grandes marcos, uno tiene que lidiar con tareas típicas para las que se conocen soluciones desde hace mucho tiempo. Sin embargo, estas soluciones no son lo suficientemente efectivas y se puede hacer mucho mejor.

En el informe, hablaremos sobre pimpl amigable con la caché, optimizando el registro de tipos de usuario, convirtiendo de JSON / XML / YAML a tipos de usuario y otras técnicas interesantes.


Sobre el orador

Anton Polukhin es el representante de Rusia en ISO en las reuniones internacionales del grupo de trabajo sobre normalización C ++. El autor de varias propuestas aceptadas para el estándar de lenguaje C ++. El autor de las bibliotecas Boost TypeIndex, DLL, Stacktrace y mantenedor activo Any, Conversion, LexicalCast, Variant. Es autor de Boost C ++ Application Development Cookbook y Second Edition.



8. C ++ 20: Las pequeñas cosas - Timur Doumler


C ++ 20 ofrece nuevas características excelentes para el lenguaje: módulos, corutinas, conceptos, el operador de la nave espacial y muchas bibliotecas nuevas. Sin embargo, además, C ++ 20 también agrega muchas pequeñas mejoras, haciendo que C ++ sea más potente y expresivo, a la vez que más seguro y holístico.

En este informe, veremos pequeñas mejoras en el núcleo del lenguaje que pueden ayudar a facilitar la vida del programador: expresiones lambda, CTAD, enlaces estructurados, inicialización y mucho más.


Sobre el orador

Timur Doumler es un desarrollador de C ++ especializado en tecnología de procesamiento y síntesis de sonido, miembro activo del comité de estandarización ISO C ++ y activista de la comunidad #include <C ++>.



7. Luchando por la baja latencia final - Mateusz Pusz


En este informe, echamos un vistazo al mundo de C ++ a través del dominio de baja latencia. Este es un mundo en el que las asignaciones y excepciones de memoria dinámica no son bienvenidas, donde no tenemos suficientes contenedores STL y donde los desarrolladores a menudo se ven obligados a bajar al nivel de ensamblador para asegurarse de que el código realmente haga exactamente lo que se necesita de la manera óptima.


Sobre el orador

Mateusz Pusz es arquitecto, ingeniero y especialista en seguridad, consultor, maestro y evangelista de C ++ moderno. Miembro de los grupos de trabajo WG21 y SG14 del Comité de Normalización de C ++.



6. Windbg: cuando no jugamos - Alexander Golovach


En la práctica de programación, a menudo surgen problemas que no pueden reproducirse e investigarse por parte del desarrollador. En tales situaciones, a veces es imposible incluso organizar el acceso remoto a la máquina. El informe discutirá y dará consejos sobre la depuración de tareas típicas como fallas, fallas de recursos y errores de sincronización en aplicaciones multiproceso que utilizan el depurador Windbg como ejemplo. El informe será de interés principalmente para los desarrolladores novatos que trabajan con la plataforma Windows.


Sobre el orador

Alexander Golovach es un programador de sistemas de Windows, desarrollador de Checkpoint Endpoint Security. Participó en la creación de productos como Anti Exploit, Anti Ransomware y Endpoint Forensics.



5. Cómo funciona el backend LLVM en C # - Egor Bogatov


LLVM contiene una gran cantidad de optimizaciones y es adecuado como back-end para muchos lenguajes de programación. Pero las cosas se complican un poco para los lenguajes administrados y los scripts JIT. En este informe, Yegor hablará sobre las dificultades que enfrentan los desarrolladores de C # al implementar el back-end LLVM.


Sobre el orador

Egor Bogatov trabaja en el equipo .NET / Mono en Microsoft, está interesado en microoptimizaciones y LLVM.



4. Estudios sobre almacenamiento en búfer: alertas asíncronas, replicación de actualizaciones, consolidación de solicitudes pendientes - Vadim Vinnik


La práctica de desarrollar una aplicación específica puede conducir a una declaración del problema, que, en un pensamiento maduro, resulta ser lo suficientemente general como para aislarlo en una abstracción que es potencialmente útil para muchas aplicaciones diferentes. Llevar una solución a una forma adecuada para uso repetido, en contraste con una solución que satisfaga las necesidades de una aplicación en particular, requiere un esfuerzo mental adicional para resaltar los diversos aspectos de la tarea y modelarlos usando el lenguaje. El informe presenta la experiencia de implementar tres abstracciones, unidas por un tema común: almacenamiento de datos en el procesamiento de subprocesos múltiples. Se muestra el tren de pensamiento desde el análisis de la tarea hasta la implementación del lenguaje C ++ 17.


Sobre el orador

Vadim Vinnik es un candidato de ciencias físicas y matemáticas, 10 años de experiencia en la enseñanza de programación para estudiantes, incluso en la Universidad Nacional Taras Shevchenko de Kiev. Más de 10 años de experiencia en programación industrial (principalmente en C / C ++ / C #), con enfoque en dominios de respaldo y recuperación de datos. Vadim - autor de los libros "Lenguajes algorítmicos y fundamentos de programación: lenguaje C", "Fundamentos de programación orientada a objetos en C ++"; autor de 29 publicaciones científicas sobre teoría de la programación; traductor del inglés al ruso de los libros "Principios de programación orientada a objetos" (Anton Eliens), "Combinación de teorías de programación" (Charles Hoar, Hee Jifen). Áreas de interés: programación en C ++ y lenguajes funcionales (Haskell).



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


El orador hablará sobre el desarrollo de la biblioteca de la biblioteca sqlite_orm ORM para SQLite3 en C ++ 14 y compartirá su experiencia al tratar de crear un ORM con el que pueda olvidarse de las consultas de texto y cómo se adapta a C ++ usando plantillas.


Sobre el orador

Evgeny Zakharov es un desarrollador de juegos C ++, autor de la biblioteca sqlite_orm.



2. Metaprogramación: construyendo una máquina de estados finitos - Sergey Fedorov


La implementación manual de máquinas de estado utilizando una caja de conmutación o herencia con funciones virtuales consume mucho tiempo y es propensa a errores. En el informe, el orador habla sobre la biblioteca de máquinas de estado AFSM (Otra máquina de estados finitos), que le permite utilizar un lenguaje declarativo para describir la máquina de estados. Y también sobre pequeños trucos y trucos de metaprogramación en ejemplos del código de esta biblioteca.


Sobre el orador

Sergey Fedorov, desarrollador líder de Yandex.Taxi, está desarrollando un marco asincrónico para el backend de Taxi. Un gran fanático de la metaprogramación y el código abierto.



1. Protección de C ++ - Pavel Filonov


C ++ a menudo se compara con los nunchucks: en manos expertas es una herramienta eficaz, y en manos de un principiante existe un peligro para la propia salud. Esta comparación obviamente está inspirada en la opinión de C ++ como un lenguaje de programación inseguro. Algunos idiomas nuevos incluso usan esta opinión para su propia promoción. Pero, ¿qué peligros específicos hay detrás del término "inseguro"? La respuesta detallada obviamente generará varias direcciones, una de las cuales será la ciberseguridad. El informe cubrirá ejemplos simples de explotación de vulnerabilidades en el código C / C ++: ejecutar código de shell en la pila, volver a libc, reescribir vptr, desbordamiento de montón.

Pero el énfasis principal se pone en la protección contra tales ataques: un canario en la pila, ASLR, áreas imposibles, pruebas y desinfectantes, fuzzing, procesos SDL.


Sobre el orador

Pavel Filonov participó en el desarrollo de los sistemas Max Patrol SIEM como desarrollador de C ++ y Kaspersky MLAD como científico de datos. Miembro del comité de programa de la conferencia C ++ Rusia. Se especializa en temas de CI / ML / rendimiento.



¡Y también, algunos informes de bonificación!

Automatízalo - Kirill Tikhonov


Escribiremos el servicio web más simple desde el cliente y el servidor en C ++. En esta parte de C ++ finalizará, y se configurará el entorno y la infraestructura. Aseguraremos la determinabilidad del montaje y la ejecución de la prueba. Facilitar la posterior actualización de bibliotecas dependientes. Automatizamos las comprobaciones estáticas, la verificación del código, las pruebas de ejecución Aseguraremos la disponibilidad del servicio, configuraremos la infraestructura, equilibraremos la carga y agregaremos escalado automático y manual. Y al final, configuraremos la entrega continua para que el código esté en producción 5 minutos después de la solicitud, e incluso los cambios no válidos y los errores del programador no podrán afectar su trabajo.


¿Todavía escribes código con tus manos? ¡Entonces vamos a ti! - Sergey Sadovnikov


En el mundo del desarrollo de C ++, hay muchas tareas en las que debe escribir una gran cantidad de código repetitivo: serialización, RPC, ORM, enlaces de lenguaje de script, etc. Y, por supuesto, hay muchos enfoques que simplifican la escritura de dicho código para, por ejemplo, para la serialización: escriba todo con sus manos, coloque todo en macros, arrastre las plantillas dirigidas por Hana, combine una con la otra. Pero hay un enfoque que, en última instancia, debería reemplazar a todos los demás: la generación de código. json, bson, xml, yaml, protobuf: hay muchas opciones para formatos en los que puede guardar datos. Cada formato tiene sus propias bibliotecas, y no una. Las bibliotecas ofrecen persistentemente su propia forma de describir los datos, y algunas ofrecen una infraestructura completa para la que debe adaptarse y ajustar su código. Y esto no siempre es conveniente, ya que uno quiere libertad. Me gustaría que el texto fuente dependa lo menos posible de cómo se serializan los datos. Y los medios modernos de generación de código pueden proporcionar esta libertad, solo necesita saber cómo usarlos correctamente.


El desastre de por vida del valor de C ++ - Arno Schödl


Los enlaces Rvalue han estado presentes en el lenguaje desde C ++ 11. Fueron introducidos para hacer que los objetos en movimiento sean más eficientes. Junto con tales optimizaciones, esta innovación aporta muchos matices al lenguaje que todo programador respetuoso debe saber. ¡Vamos a sumergirnos en el mundo de los enlaces de valor y examinarlos cuidadosamente!


Excepciones de C ++ a través del prisma de la optimización del compilador - Roman Rusyaev


En el patio del siglo XXI, la implementación improductiva del manejo de excepciones de C ++ basado en setjmp / longjmp ya está en el pasado. Los compiladores modernos, como gcc y clang, utilizan una implementación avanzada de excepciones C ++ llamada manejo de excepciones de costo cero. Pero, ¿qué tan cierto es este costo cero? Sí, pagamos aumentando el tamaño del archivo binario, así como en el caso en que se produce la excepción, comenzando el proceso de desenrollado de la pila, llamando a destructores para objetos locales, etc. Pero, ¿perdemos rendimiento si no se produce una excepción? ¿Hay alguna restricción en las optimizaciones del compilador? Este informe describe cómo las excepciones de C ++ afectan las optimizaciones del compilador. Qué optimizaciones no se pueden aplicar si la función puede generar excepciones y qué optimizaciones se vuelven más difíciles de aplicar. Los ejemplos de implementación de excepciones y optimizaciones del compilador se consideran sobre la base de LLVM. El informe tiene como objetivo dar a las personas una comprensión de cuándo tiene sentido construir su aplicación con -fno-excepciones, y cuándo puede disfrutar de todas las delicias de usar excepciones de C ++, sabiendo que su código no ha perdido significativamente el rendimiento en comparación con el código donde las excepciones están deshabilitadas.


Generadores, Corutinas y Otros Dulces que Desenrollan el Cerebro - Adi Shavit


C ++ 20 nos trajo las corutinas y con ellas la capacidad de escribir generadores, tipos iterables y rangos. Veremos cómo las corutinas ayudan a escribir código más limpio y legible con abstracciones y generalizaciones más claras.


Cómo no ahogarse en un gran proyecto antiguo - Yuri Minaev


El mundo ha cambiado. Lo que funcionó antes no dejó de funcionar, pero se volvió insuficiente. La programación de pares, las revisiones de código, las pruebas unitarias siguen siendo importantes y necesarias, pero ya no pueden proporcionar el nivel adecuado de calidad y confiabilidad de los proyectos de C ++. Muchos proyectos han crecido cientos de veces. El crecimiento fue gradual, y no todos entendieron lo que había sucedido. Cualquier proyecto antiguo grande consiste en capas heterogéneas (depósitos geológicos) y, lo que es más importante, nadie ya sabe cómo funciona todo. Ha llegado el momento de las herramientas y metodologías para ayudar a mantener la calidad e integridad del código: DevSecOps, análisis estático, análisis dinámico, plataformas de medición de calidad.


Cómo ayudar y cómo prevenir el compilador - Andrey Oleinikov


Como regla general, puede confiar en el hecho de que el compilador optimiza el archivo binario resultante para que funcione lo más rápido posible. Pero el compilador no sabe qué datos y qué hardware se lanzará el programa. Además, me gustaría que la compilación tome un tiempo aceptable. Debido a esto, el resultado puede ser subóptimo. Sugiero usar ejemplos para LLVM para ver cómo puede decirle al compilador cómo optimizar el programa y mejorar o empeorar el resultado.


La próxima CoreHard (C ++ CoreHard Spring 2020 Conference) está en camino y se llevará a cabo del 10 al 11 de abril de 2020 en Minsk, busque entradas y el programa completo en el sitio web oficial.

Y puede enviar un informe aquí (truco de vida: ¡el orador no puede pagar el boleto!)

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


All Articles