[Из песочницы] Топ-10 докладов конференции C++ CoreHard Autumn 2019

8erld4omqja2ujstgegebqeeibm.jpeg

CoreHard — C++ конференция, проходящая в Минске дважды в год, весной и осенью. С 2015 года мы выросли из небольшого сообщества энтузиастов в крупную региональную конференцию. Мы стараемся совмещать знания признанных мастеров мира С++ с развитием локального С++ движения, активно привлекая докладчиков из местных белорусских, российских и украинских компаний.

Спешим поделиться с хабровчанами топ-10 свежеиспеченных видео с нашей недавно отшумевшей конференции.

Итак, поехали: топ-10 докладов по оценкам зрителей.

10. Исключительная модель памяти — Алексей Ткаченко


Концепция памяти в компьютере давно выходит далеко за рамки набора «железных» микросхем динамической памяти, установленных в компьютере. Память давно воспринимается как некоторое адресуемое пространство, управлением которой занимается модуль управления памятью — MMU. Этот подход позволяет разграничить память физическую и память виртуальную, что активно используется во всех операционных системах, использующих понятие процесса как единицы управления ресурсами.

В докладе мы поговорим о некоторых необычных применениях методов защиты, реализованных в MMU, а именно о способах имитации взаимодействия аппаратного обеспечения с центральным процессором через регистровые файлы.

В докладе будут охвачены операционные системы Windows и Linux, и различные архитектуры.
Доклад будет интересен в первую очередь разработчикам встраиваемого (Embedded) программного обеспечения, однако техники, описанные в докладе, будут полезны и разработчикам для «больших» компьютеров.


О докладчике

Алексей Ткаченко более 12 лет занимается разработкой софта для программно-аппаратных испытательных и стендовых комплексов изделий космической техники в компании «Пеленг». Основные рабочие инструменты: C++ для низкоуровневых задач и взаимодействия с аппаратурой и C#/.NET — для клиентского ПО. В свободное время увлекается Embedded на скромных микроконтроллерах.

qcvy4_5lqzxdjmn-xdzi8kktvjk.jpeg

9. C++ трюки из Такси — Антон Полухин


При написании больших фреймворков приходится сталкиваться с типовыми задачами, решения для которых давно известны. Однако эти решения недостаточно эффективны, и можно сделать намного лучше.

В докладе мы поговорим о кэш-дружелюбном pimpl, оптимизации логирования пользовательских типов, конвертации из JSON/XML/YAML в пользовательские типы и других интересных техниках.


О докладчике

Антон Полухин — представитель России в ISO на международных заседаниях рабочей группы по стандартизации C++. Автор нескольких принятых предложений к стандарту языка C++. Aвтор Boost библиотек TypeIndex, DLL, Stacktrace и активный maintainer Any, Conversion, LexicalCast, Variant. Автор книг «Boost C++ Application Development Cookbook» и «Boost C++ Application Development Cookbook, Second Edition».

9gf4kfay9_5vccdrxtek7xhnow8.jpeg

8. C++20: The small things — Timur Doumler


C++ 20 приносит в язык новые большие возможности: модули, сопрограммы, концепты, оператор spaceship и много новых библиотек. Однако кроме того, C++20 также добавляет множество небольших улучшений, делая С++ более мощным и выразительным и одновременно более безопасным и целостным.

В этом докладе мы взглянем на небольшие улучшения в ядре языка, которые могут помочь сделать жизнь программиста проще: лямбда-выражения, CTAD, structured bindings, инициализация и многое другое.


О докладчике

Timur Doumler — C++ разработчик, специализирующийся в технологии обработки и синтеза звука, активный участник комитета стандартизации ISO C++ и активист сообщества #include .

fubmezrscc6mdfj9q6uvrhyqlzu.jpeg

7. Striving for ultimate low latency — Mateusz Pusz


В этом докладе мы взглянем на С++ мир через домен low latency. Это мир, в котором не приветствуются динамические аллокации памяти и исключения, где нам может быть недостаточно STL контейнеров и где разработчики зачастую вынуждены спускаться до уровня ассемблера чтобы убедиться что код действительно делает именно то, что нужно оптимальным образом.


О докладчике

Mateusz Pusz — архитектор, инженер и специалист по безопасности, консультант, преподаватель и евангелист современного С++. Член рабочих групп WG21 и SG14 Комитета стандартизации C++.

1odtxm0bdrjywvfg26ee8n_ybre.jpeg

6. Windbg: когда у нас не воспроизводится — Александр Головач


В практике программирования часто возникают проблемы, которые невозможно воспроизвести и исследовать на стороне разработчика. В таких ситуациях порой бывает невозможно даже организовать удаленный доступ к машине. В докладе будут рассмотрены и даны советы по отладке типовых задач таких как аварийное завершение, утечка ресурсов и ошибки синхронизации в многопоточных приложениях на примере отладчика Windbg. Доклад будет интересен в первую очередь начинающим разработчикам, работающим с платформой Windows.


О докладчике

Александр Головач — системный программист под Windows, разработчик Checkpoint Endpoint Security. Принимал участие в создании таких продуктов как Anti Exploit, Anti Ransomware и Endpoint Forensics.

mhhh8qpkcdaprsvpjrswazyujg4.jpeg

5. Как работает LLVM бэкенд в C# — Егор Богатов


LLVM содержит огромное количество оптимизаций и подходит в качестве бэкенда для многих языков программирования. Но все немного усложняется для managed языков и JIT сценариев. В этом докладе Егор расскажет о трудностях, с которыми столкнулись разработчики языка C# при реализации LLVM бэкенда.


О докладчике

Егор Богатов работает в команде .NET/Mono в Microsoft, интересуется микрооптимизациями и LLVM.

196h-uz9v-bj8qa5h1ku-hsexfc.jpeg

4. Этюды о буферизации: асинхронные оповещения, репликация обновлений, объединение ожидающих запросов — Вадим Винник


Практика разработки конкретного приложения может приводить к постановке задачи, которая, в зрелом размышлении, оказывается достаточно общей, чтобы вычленить её в абстракцию, потенциально полезную для множества различных приложений. Приведение решения к виду, пригодному для многократного применения, в отличие от решения, отвечающего нуждам конкретного приложения, требует дополнительных мыслительных усилий по выделению вариативных аспектов задачи, и по их моделированию средствами языка. В докладе представлен опыт реализации трех абстракций, объединенных общей темой — буферизацией данных при многопоточной обработке. Показан ход мысли от анализа задачи до реализации средствами языка C++17.


О докладчике

Вадим Винник — кандидат физико-математических наук, 10 лет опыта в преподавании программирования студентам, в том числе в Киевском национальном университете имени Тараса Шевченко. Более 10 лет опыта в промышленном программировании (в основном на языках C/C++/C#), с упором в домены резервного копирования и восстановления данных. Вадим — автор книг «Алгоритмические языки и основы программирования: язык C», «Основы объектно-ориентированного программирования на языке C++»; автор 29 научных публикаций по теории программирования; переводчик с английского на русский книг «Принципы объектно-ориентированного программирования» (Антон Элиенс), «Объединение теорий программирования» (Чарльз Хоар, Хи Цзифень). Области интересов: программирование на языке С++ и функциональных языках (Haskell).

ybufe0qls5kzd-wmmhwkwcz2jv0.jpeg

3. Статичный SQL в С++14 — Евгений Захаров


Докладчик расскажет про разработку библиотеки ORM-библиотеки sqlite_orm для SQLite3 на С++14 и поделится своим опытом в попытке создать ORM с которой можно забыть про текстовые запросы и как это адаптируется в С++ при помощи шаблонов.


О докладчике

Евгений Захаров — разработчик игр на C++, автор библиотеки sqlite_orm.

h6djbbdojubllnpqng-tzsagcq4.jpeg

2. Метапрограммирование: строим конечный автомат — Сергей Федоров


Реализовывать конечные автоматы руками с помощью switch case или наследования с виртуальными функциями очень трудоемко и подвержено ошибкам. В докладе спикер рассказывает о библиотеке конечных автоматов AFSM (Another Finite State Machine), которая позволяет воспользоваться декларативным языком для описания машины состояний. А также о небольших трюках и хитростях метапрограммирования на примерах из кода этой библиотеки.


О докладчике

Сергей Федоров — ведущий разработчик в «Яндекс.Такси», занимается разработкой асинхронного фреймворка для бэкенда Такси. Большой любитель метапрограммирования и open source.

zzlzeqowakfqfsaxxayj6ajayqi.jpeg

1. Защищая C++ — Павел Филонов


С++ зачастую сравнивают с нунчаками: в умелых руках — это эффективный инструмент, а в руках новичка — опасность для собственного здоровья. Это сравнение очевидно навеяно мнением о С++ как о небезопасном языке программирования. Некоторые новые языки даже используют это мнение для собственного продвижения. Но какие конкретно опасности скрываются за термином «небезопасный»? Развёрнутый ответ очевидно поднимет несколько направлений, одним из которых будет кибербезопасность. В докладе будут рассмотрены простые примеры эксплуатации уязвимостей C/C++ кода: выполнение shell-кода на стеке, возврат в libc, переписывание vptr, переполнение кучи.

Но главный упор сделан на средства защиты от подобных атак: канарейка на стеке, ASLR, неисполнимые области, тестирование и санитайзеры, fuzzing, SDL процессы.


О докладчике

Павел Филонов участвовал в разработке систем Max Patrol SIEM в роли С++ разработчика и Kaspersky MLAD в роли Data Scientist’а. Член программного комитета конференции C++ Russia. Специализируется на темах CI/ML/performance.

6hzmrzjyi7pqwrmuledtsn-a6dk.jpeg

А также, несколько бонусных докладов!

Автоматизируй это — Кирилл Тихонов


Мы напишем простейший веб-сервис из клиента и сервера на C++. На этом C++ часть закончится, и пойдет настройка окружения и инфраструктуры. Мы обеспечим детерминируемость сборки и прогона тестов. Облегчим последующее обновление зависимых библиотек. Автоматизируем статические проверки, верификацию кода, прогон тестов. Обеспечим доступность сервиса, настроим инфраструктуру, сбалансируем нагрузку, добавим автоматическое и ручное масштабирование. И под конец мы настроим continious delivery таким образом, что код будет на продакшене через 5 минут после реквеста, при этом даже невалидные изменения и ошибки программиста не смогут повлиять на его работу.


Вы ещё пишете код руками? Тогда мы идём к вам! — Сергей Садовников


В мире разработки на C++ есть множество задач, при которых приходится писать большое количество boilerplate-кода: сериализация, RPC, ORM, биндинги к скриптовым языкам и т. п. И, раузмеется, существуют множество подходов, упрощающих написание такого кода для, скажем, для сериализации: писать всё руками, положить всё в макросы, притащить шаблоны во главе с Hana, комбинировать одно с другим. Но есть один подход, который в конечном должен заменить все остальные: кодогенерация. json, bson, xml, yaml, protobuf — вариантов форматов, в которых можно сохранять данные, великое множество. Для каждого формата есть свои библиотеки, и не одна. Библиотеки настойчиво предлагают свой собственный способ описания данных, а некоторые — так и целую инфраструктуру, под которую надо подстраиваться самому, подстраивать код. А это — не всегда удобно, так как хочется свободы. Хочется, чтобы исходный текст как можно меньше зависел от того, каким образом сериализуются данные. И современные средства кодогенерации могут предоставить эту свободу, надо лишь знать, как правильно их применить.


The C++ rvalue lifetime disaster — Arno Schödl


Rvalue ссылки присутствовали в языке начиная с С++11. Они были введены для того чтобы сделать перемещение объектов более эффективным. Вместе с подобными оптимизациями это нововведение привносит в язык массу нюансов, которыми обязательно нужно владеть каждому уважающему себя программисту. Давайте же погрузимся в мир rvalue ссылок и пристально их исследуем!


Исключения C++ через призму компиляторных оптимизаций — Роман Русяев


На дворе 21-й век, непроизводительная реализация обработки C++ исключений на основе setjmp/longjmp уже в прошлом. Современные компиляторы, такие как gcc и clang, используют продвинутую реализацию C++ исключений, называемую zero-cost exception handling. Но насколько действительно это zero-cost? Да, мы платим увеличением размера бинарного файла, а также в случае, когда исключение действительно выбрасывается, запуская процесс stack unwinding, вызывая деструкторы для локальных объектов и т.д. Но теряем ли мы производительность, если исключение не выбрасывается? Появляются ли какие-то ограничения на компиляторные оптимизации? В этом докладе дано описание того, каким образом С++ исключения оказывают влияние на компиляторные оптимизации. Какие оптимизации не могут быть применены в случае, если функция может бросить исключения, а какие оптимизации становится труднее применять. Примеры реализации исключений и компиляторных оптимизаций рассматриваются на базе LLVM. Доклад преследует цель дать людям понимание, когда делать сборку своего приложения с -fno-exceptions имеет смысл, а когда можно наслаждаться всеми прелестями использования C++ исключений, зная, что их код не значительно потерял в производительности по сравнению с кодом, где исключения отключены.


Generators, Coroutines and Other Brain Unrolling Sweetness — Adi Shavit


C++20 принес нам корутины и вместе с ними — возможность писать генераторы, итерируемые типы и рейнджи. Мы посмотрим, как корутины помогают писать более чистый и более читаемый код с облегченными абстракциями и обобщенностью.


Как не подавиться большим старым проектом — Юрий Минаев


Мир изменился. То, что работало раньше, не то чтобы перестало работать, но стало недостаточным. Парное программирование, обзоры кода, юнит-тесты по-прежнему важны и необходимы, но они уже не могут обеспечить должного уровня качества и надёжности С++ проектов. Многие проекты выросли в сотни раз. Рост происходил постепенно, и еще не все поняли, что произошло. Любой большой старый проект состоит из разнородных слоёв (геологических отложений) и, самое главное, уже никто не знает, как это всё работает. Пришло время инструментов и методологий, помогающих сохранять качество и целостность кода: DevSecOps, статический анализ, динамический анализ, платформы измерения качества.


Как помочь и как помешать компилятору — Андрей Олейников


Как правило, можно положиться на то, что компилятор оптимизирует результирующий бинарный файл так, чтобы она работала максимально быстро. Но компилятор не знает на каких данных и на каком железе программа будет запущена. Плюс хотелось бы, чтобы компиляция занимала приемлемое время. Из-за этого результат может оказаться субоптимальным. Предлагаю на примерах для LLVM посмотреть как можно подсказать компилятору как оптимизировать программу и сделать результат лучше или хуже.


Следующий CoreHard (C++ CoreHard Spring 2020 Conference) уже на подходе и состоится 10–11 апреля 2020 года в Минске, билеты и полную программу ищите на официальном сайте.

А подать доклад можно здесь (лайфхак: спикеру можно не платить за билет!)

© Habrahabr.ru