Size: a a a

Конференция C++ Russia

2021 July 18

AB

Anton Bikineev in Конференция C++ Russia
я имел ввиду, что функция “foo() [clone .resolver]:” в вашем примере может компилятором автоматически генерится с __atttribute__((consttructor)) и поддержка линкера не нужна
источник

АР

Андрей Руссков... in Конференция C++ Russia
ну там скорее можно сделать заполнение таблицы вызовов. То есть код resolver'а превращается в что-то типа

int bar() {
   extern int(*foo_resolved_by_constructor)();
   static int(*foo)() = foo_resolved_by_constructor

       ? foo_resolved_by_constructor
       : resolve();
   (*foo)();
}


где resolve - выбор перегрузки уже в рантайме
источник

АР

Андрей Руссков... in Конференция C++ Russia
но в этом всё равно не супер много смысла если (по идее) линкер мог бы и сам подставлять нужное. А внутри бинарника всё и само подставится как надо
источник

I

Ioann_V in Конференция C++ Russia
Ребят, а можете подсказать реальные случаи нужды в корутинах?
источник

A

Arelav in Конференция C++ Russia
Код на колбеках сложен. К тому же компилятор может синлайнить аллокации, ну и в целом возможность кооперативной многозадачности
источник

A

Arelav in Конференция C++ Russia
всякий сетевой код если конкретный пример не?
источник

I

Ioann_V in Конференция C++ Russia
Да, но корутины это дорого - надо же стек там сохранять, все дела.
источник

I

Ioann_V in Конференция C++ Russia
Ну можно же асинхронно.
источник

A

Arelav in Конференция C++ Russia
стеклесс нет
источник

A

Arelav in Конференция C++ Russia
ну на колбеках
источник

A

Arelav in Конференция C++ Russia
ну например ты пишешь asio::async_read
источник

A

Arelav in Конференция C++ Russia
Хочешь либо колбеки либо корутины/файберы
источник

I

Ioann_V in Конференция C++ Russia
Ну да. А это плохо?
источник

A

Arelav in Конференция C++ Russia
файберы в принципе дороже да. Но код проще. сравни golang и котлин
источник

A

Arelav in Конференция C++ Russia
Код сложнее. Не линейный. Оптимизации компилятора невозможны для уменьшеняя количества аллокаций.
источник

I

Ioann_V in Конференция C++ Russia
Какие аллокации, где? Коллбек, ты его передал и все.
источник

АР

Андрей Руссков... in Конференция C++ Russia
для stackless корутин не надо
источник

A

Arelav in Конференция C++ Russia
ну вообще надо обычно аллокацию все равно просто под размер
источник

АР

Андрей Руссков... in Конференция C++ Russia
переключение контекста - это перетасовывание пары указателей шедулером. После того как ты написал шедулер, дальше код превращается в написанную в последовательном стиле асинхронщину
источник

I

Ioann_V in Конференция C++ Russia
Ну вот реально, есть кейс где это нужно? Не просто же так в плюсах этого аж до 17ого не было.
источник