home.social

#vtable — Public Fediverse posts

Live and recent posts from across the Fediverse tagged #vtable, aggregated by home.social.

  1. Динамический полиморфизм против std::variant с указателями: Разрушаем мифы о скорости std::visit (v.2*)

    В экосистеме современного C++ прочно укоренилось мнение: классический динамический полиморфизм через виртуальные функции ( vtable ) и наследование — это устаревший, медленный и недружелюбный к кэшу процессора механизм. В качестве «серебряной пули» модно предлагать связку std::variant и std::visit . Если вы спросите любого виртуального умника (ИИ) он до последнего будет убеждать вас что std::variant и std::visit всегда(!) лучше чем виртуальные функции, даже не сомневайтесь. Проблема в том что с таким отношением вы во многих случаях просто лишаете себя выбора адекватного технического решения. Решения адекватного условиям конкретной задачи с необходимостью диспетчеризации вызовов. По интернету кочуют статьи, утверждающие, что std::visit выполняет диспетчеризацию за фиксированное время O(1) и полностью уничтожает старый добрый ООП-подход, но вы должны понимать что не существует универсальных решений на все случаи жизни. А что если мы попробуем уравнять начальные условия использования обеих техник диспетчеризации и будем использовать вариант с указателями, а не с эмплейс-объектами: std::vector< std::unique_ptr < BaseClass>> и std::vector<std::variant std::unique_ptr< TypeA>, std::unique_ptr< TypeB>, std::unique_ptr< TypeC>>> в условиях раздельной компиляции классов и кода который делает вызовы (зачем это надо?).

    habr.com/ru/articles/1047930/

    #visit #vtable #функции #кэш #динамический_полиморфизм #cplusplus #assembler

  2. Динамический полиморфизм против std::variant с указателями: Разрушаем мифы о скорости std::visit (v.2*)

    В экосистеме современного C++ прочно укоренилось мнение: классический динамический полиморфизм через виртуальные функции ( vtable ) и наследование — это устаревший, медленный и недружелюбный к кэшу процессора механизм. В качестве «серебряной пули» модно предлагать связку std::variant и std::visit . Если вы спросите любого виртуального умника (ИИ) он до последнего будет убеждать вас что std::variant и std::visit всегда(!) лучше чем виртуальные функции, даже не сомневайтесь. Проблема в том что с таким отношением вы во многих случаях просто лишаете себя выбора адекватного технического решения. Решения адекватного условиям конкретной задачи с необходимостью диспетчеризации вызовов. По интернету кочуют статьи, утверждающие, что std::visit выполняет диспетчеризацию за фиксированное время O(1) и полностью уничтожает старый добрый ООП-подход, но вы должны понимать что не существует универсальных решений на все случаи жизни. А что если мы попробуем уравнять начальные условия использования обеих техник диспетчеризации и будем использовать вариант с указателями, а не с эмплейс-объектами: std::vector< std::unique_ptr < BaseClass>> и std::vector<std::variant std::unique_ptr< TypeA>, std::unique_ptr< TypeB>, std::unique_ptr< TypeC>>> в условиях раздельной компиляции классов и кода который делает вызовы (зачем это надо?).

    habr.com/ru/articles/1047930/

    #visit #vtable #функции #кэш #динамический_полиморфизм #cplusplus #assembler

  3. Динамический полиморфизм против std::variant с указателями: Разрушаем мифы о скорости std::visit (v.2*)

    В экосистеме современного C++ прочно укоренилось мнение: классический динамический полиморфизм через виртуальные функции ( vtable ) и наследование — это устаревший, медленный и недружелюбный к кэшу процессора механизм. В качестве «серебряной пули» модно предлагать связку std::variant и std::visit . Если вы спросите любого виртуального умника (ИИ) он до последнего будет убеждать вас что std::variant и std::visit всегда(!) лучше чем виртуальные функции, даже не сомневайтесь. Проблема в том что с таким отношением вы во многих случаях просто лишаете себя выбора адекватного технического решения. Решения адекватного условиям конкретной задачи с необходимостью диспетчеризации вызовов. По интернету кочуют статьи, утверждающие, что std::visit выполняет диспетчеризацию за фиксированное время O(1) и полностью уничтожает старый добрый ООП-подход, но вы должны понимать что не существует универсальных решений на все случаи жизни. А что если мы попробуем уравнять начальные условия использования обеих техник диспетчеризации и будем использовать вариант с указателями, а не с эмплейс-объектами: std::vector< std::unique_ptr < BaseClass>> и std::vector<std::variant std::unique_ptr< TypeA>, std::unique_ptr< TypeB>, std::unique_ptr< TypeC>>> в условиях раздельной компиляции классов и кода который делает вызовы (зачем это надо?).

    habr.com/ru/articles/1047930/

    #visit #vtable #функции #кэш #динамический_полиморфизм #cplusplus #assembler