C++

Разработка


Александр Корнилов
Старший разработчик @ АО Лаборатория Касперского
Нижний Новгород

Большинство проблем в многопоточном коде связано с ошибками синхронизации при доступе к общим данным.

Ошибки чаще всего происходят из-за некорректного использования базовых примитивов синхронизации.

Некорректное использование — это обычно следствие ручного управления базовыми примитивами синхронизации, которые находятся на достаточно низком уровне абстракции.

Ручное управление базовыми примитивами синхронизации сродни ручному управлению памятью, но приводят к сбоям, которые в разы сложнее проанализировать и устранить.

Существующие методологии для решения такого рода дефектов в коде, на мой взгляд, недостаточно развиты и не решают проблему на системном уровне.

Необходим новый подход, который повысил бы уровень абстракции инструментов, обеспечивающих синхронизацию при доступе к общим данным.

Пример: ручное управление памятью. Одно из решений проблемы введение дополнительной более высокоуровневой абстракции - умные указатели.

  • День выступления: 15.09.2023
  • Время начала: 11:45
  • Время окончания: 12:30
  • Зал : Зал 3.1
  • Категории : Разработка
  • Секции : C++

  • Павел Новиков
    разработчик
    Москва

    Цель этого доклада — познакомить слушателей с базовой реализацией type erasure в C++ и её подноготной.

    Используя реализацию обёртки с _семантикой значения_ для полиморфных типов в качестве примера, мы посмотрим на то, как работает type erasure аналогичный `std::any`.

    В отличие от повсеместно используемой семантики указателей и ссылок, в данном случае обёртка с семантикой значения позволит нам использовать полиморфные объекты со "стёртым" типом (type erased) как обычные значения: перемещать их туда-сюда, копировать, присваивать новые значения, со всей головной болью владения и клонирования спрятанной в реализации "за кулисами".

    Сама _идея_ обёртки с семантикой значения была подробно рассказана в докладе Jonathan Boccara [здесь]().

    • День выступления: 15.09.2023
    • Время начала: 11:00
    • Время окончания: 11:45
  • Зал : Зал 3.1
  • Категории : Разработка
  • Секции : C++