Войти через соцсеть:
Войти через email:
Большинство проблем в многопоточном коде связано с ошибками синхронизации при доступе к общим данным.
Ошибки чаще всего происходят из-за некорректного использования базовых примитивов синхронизации.
Некорректное использование — это обычно следствие ручного управления базовыми примитивами синхронизации, которые находятся на достаточно низком уровне абстракции.
Ручное управление базовыми примитивами синхронизации сродни ручному управлению памятью, но приводят к сбоям, которые в разы сложнее проанализировать и устранить.
Существующие методологии для решения такого рода дефектов в коде, на мой взгляд, недостаточно развиты и не решают проблему на системном уровне.
Необходим новый подход, который повысил бы уровень абстракции инструментов, обеспечивающих синхронизацию при доступе к общим данным.
Пример: ручное управление памятью. Одно из решений проблемы введение дополнительной более высокоуровневой абстракции - умные указатели.
Цель этого доклада — познакомить слушателей с базовой реализацией type erasure в C++ и её подноготной.
Используя реализацию обёртки с _семантикой значения_ для полиморфных типов в качестве примера, мы посмотрим на то, как работает type erasure аналогичный `std::any`.
В отличие от повсеместно используемой семантики указателей и ссылок, в данном случае обёртка с семантикой значения позволит нам использовать полиморфные объекты со "стёртым" типом (type erased) как обычные значения: перемещать их туда-сюда, копировать, присваивать новые значения, со всей головной болью владения и клонирования спрятанной в реализации "за кулисами".
Сама _идея_ обёртки с семантикой значения была подробно рассказана в докладе Jonathan Boccara [здесь]().