Size: a a a

2020 October 02

CD

Constantine Drozdov in pro.cxx
Dmitriy
А если коллбэки могут иметь кучу собственных шаблонных аргументов?
Да какая разница, формально транслируем. Перечисляем все случая конструирования параметра, для каждого берем тип, все записываем в вариант
источник

m

magras in pro.cxx
Constantine Drozdov
Задачи пока не вижу. Есть какое-то решение задачи, представленное каким-то кодом
Задача написать простейший однопоточный экзекютор.
источник

CD

Constantine Drozdov in pro.cxx
Получаем схему программирования, очень популярную у ФПшников
источник

CD

Constantine Drozdov in pro.cxx
magras
Задача написать простейший однопоточный экзекютор.
Это не задача, это решение
источник

D

Dmitriy in pro.cxx
Constantine Drozdov
Да какая разница, формально транслируем. Перечисляем все случая конструирования параметра, для каждого берем тип, все записываем в вариант
Насколько это будет быстрее по сравнению с TE + Small Object Optimization?
источник

CD

Constantine Drozdov in pro.cxx
Dmitriy
Насколько это будет быстрее по сравнению с TE + Small Object Optimization?
Ну... аллокатора вообще больше нет
источник

D

Dmitriy in pro.cxx
Constantine Drozdov
Ну... аллокатора вообще больше нет
Предположим, что у нас агрессивный аллокатор/пул, который умеет в очень быстрое выделение и переиспользование памяти
Речь в первую очередь о вызовах
источник

CD

Constantine Drozdov in pro.cxx
Dmitriy
Предположим, что у нас агрессивный аллокатор/пул, который умеет в очень быстрое выделение и переиспользование памяти
Речь в первую очередь о вызовах
Вызов аллокатора рядом с кэшмиссом ходит. Конкретные числа на конкретных примерах. Мне не нравится подход с закрытием из общих соображений, но вряд ли будет медленнее, если не эксплуатируется перемещение
источник

DS

Dmitry Sokolov in pro.cxx
Диспетчеризация variant это вызов одной из сгенерированных прокси функций по номеру. Диспетчеризация function вызов той же proxy функции по указателю который лежит в самой function.
источник

m

magras in pro.cxx
Я не понимаю.

Был вопрос: могут ли модули заменить std::funtion.
Ответ: нет, так как std::function дает type erasure и используется именно из-за него.
Дальнейшая дискуссия уходит глубоко в теорию без каких либо объяснений как на практике variant может заменить type erasure.
источник

D

Dmitriy in pro.cxx
Dmitry Sokolov
Диспетчеризация variant это вызов одной из сгенерированных прокси функций по номеру. Диспетчеризация function вызов той же proxy функции по указателю который лежит в самой function.
В function может лежать сам объект
источник

O

Oleksandr in pro.cxx
Если у нас конечный набор колбеков - почему бы просто не заменить их энамом и не делать свитч по нему?
источник

CD

Constantine Drozdov in pro.cxx
magras
Я не понимаю.

Был вопрос: могут ли модули заменить std::funtion.
Ответ: нет, так как std::function дает type erasure и используется именно из-за него.
Дальнейшая дискуссия уходит глубоко в теорию без каких либо объяснений как на практике variant может заменить type erasure.
Не понимаете что, что СЕО никогда не поставит вам задачу написать однопоточный экзекютор?)
источник

CD

Constantine Drozdov in pro.cxx
Oleksandr
Если у нас конечный набор колбеков - почему бы просто не заменить их энамом и не делать свитч по нему?
Ну вы переизобретаете variant
источник

D

Dmitriy in pro.cxx
Dmitriy
В function может лежать сам объект
gcc последних версий оптимизирует объекты до 16 байт, msvc - аж до 32, clang не проверял
источник

CD

Constantine Drozdov in pro.cxx
variant из объектов без полей, разумеется, enum
источник

CD

Constantine Drozdov in pro.cxx
Dmitry Sokolov
Диспетчеризация variant это вызов одной из сгенерированных прокси функций по номеру. Диспетчеризация function вызов той же proxy функции по указателю который лежит в самой function.
Ну switch все-таки отличается от виртуального вызова
источник

DS

Dmitry Sokolov in pro.cxx
Constantine Drozdov
Ну switch все-таки отличается от виртуального вызова
Но обычно visit это таки не switch.
источник

CD

Constantine Drozdov in pro.cxx
Dmitry Sokolov
Но обычно visit это таки не switch.
Нет разницы, цепочка if (x == 0) else if (x == 1) не только имеет шанс оптимизироваться, но и, скажем, наглядно продемонстрирует компилятору отсутствие барьеров памяти в вызываемом коде
источник

DS

Dmitry Sokolov in pro.cxx
Constantine Drozdov
Нет разницы, цепочка if (x == 0) else if (x == 1) не только имеет шанс оптимизироваться, но и, скажем, наглядно продемонстрирует компилятору отсутствие барьеров памяти в вызываемом коде
Нет, не цепочка, а таблица указателей на функции.
источник