
Aidar
03.10.2018
18:53:45
Чтобы было по классике

Yarique
03.10.2018
18:53:47

Aidar
03.10.2018
18:54:20
foo_base с виртуальным говном->basic_foo с шаблонами->конкретный foo

Max
03.10.2018
18:54:57

Google

Yarique
03.10.2018
18:55:02

Aidar
03.10.2018
18:55:10
По классике из 90-х

Max
03.10.2018
18:55:39

Yarique
03.10.2018
18:56:45

Constantine
03.10.2018
18:57:34
очень похоже на то, хах ?
вообще моя интерпретация проблемы начинается с вопроса WTF происходит и зачем это нужно, учитывая, что это cancel асинхронной среды (ничего не делать)

Yarique
03.10.2018
18:59:21

Constantine
03.10.2018
19:00:14

Yarique
03.10.2018
19:03:23

Alexander
03.10.2018
20:05:18
Привет. А код из доклада Chandler Carruth “Spectre: Secrets, Side-Channels, Sandboxes, and Security”
с последнего cppcon выложен? Не натыкался никто?

Andrew
03.10.2018
20:28:18

Igor
03.10.2018
20:28:45

Aidar
03.10.2018
20:28:56

Andrew
03.10.2018
20:29:55
Не, мне именно чтобы выбирать реализацию по параметрам в рантайме.

Google

Andrew
03.10.2018
20:30:48
И все равно, что за варианты?

Constantine
03.10.2018
20:32:14

Andrew
03.10.2018
20:33:15
А как красиво выбирать реализацию в рантайме без полиморфизма?

Alexander
03.10.2018
20:35:01

Max
03.10.2018
20:36:23
Выбирать нужно либо одно, либо другое, за редкими исключениями, которые в первом приближении можно опустить (как пример, для разных type-erasure конструкций)

Constantine
03.10.2018
20:40:41

Andrew
03.10.2018
20:41:45

Constantine
03.10.2018
20:42:51
Не понял?
Вы пишете все как будто никакого рантайма нет. Потом потребности рантайма реализуете через динамический полиморфизм. У вас не будет наследования в основных классах, у вас будет фигня_фор_рантайм_интерфейс с пробросом на нужные методы

Andrew
03.10.2018
20:44:41
Если нет, то без кода сложно пока понять.

Constantine
03.10.2018
20:45:09
Вот это типичный класс перевода статического полиморфизма в рантайм потребности

Andrew
03.10.2018
20:45:58
Там же двойной оверхед получается, это же худший пример с точки зрения производительности.

Constantine
03.10.2018
20:46:28
Какой двойной оверхед?
У вас динамический запрос это все еще один виртуальный вызов
Причем ровно один

Andrew
03.10.2018
20:48:12
Ну сначала найти по указателю внутреннюю "схоронку" с callable, а потом, если это указатель на функцию, или виртуальный оператор еще и проход в vtable, нет?
Хотя последнее кажется лишним в случае vtable.

Google

Constantine
03.10.2018
20:48:49
Ну а так у вас разыменование unique_ptr и виртуальный вызов
Вызов function это в худшем случае разыменование unique_ptr и виртуальный вызов)

Andrew
03.10.2018
20:50:39
Да, это же худший из возможных вариантов, из-за которых тот же Майерс везде рекомендовал использовать лямбды по возможности вместо std::function

Constantine
03.10.2018
20:51:04
Я к тому, что это обязательность любого динамического полиморфизма и худший случай function
Т.е. function вроде как доказанно наилучшее реализация в случае рантайм-зависимости, нет?

Andrew
03.10.2018
20:52:42
Хм, я почему-то не считал разыменование unique_ptr, Вы правы.

Constantine
03.10.2018
20:54:42
Угу. И тут неожиданно выясняется очень забавная история. Вот представьте, что у вас некоторый ява-интерфейс с методами before()/after() и вот хотпаф это вызов some->before(); some->after(); В случае реализации с type erasure в последний момент вы неожиданно просто добавляете метод before_and_after() { inner.before(); inner.after(); } и у вас все в шоколаде
В динамическом полиморфизме вы должны будете это ручками в каждый класс и все классы финалить для такого эффекта
(предложение по forceoverride еще не готово :( )

Andrew
03.10.2018
20:56:44

Constantine
03.10.2018
20:57:01
В before_and_after() один (он сам)

Andrew
03.10.2018
20:58:06
Истинно.

Constantine
03.10.2018
20:58:33
Вообще статический полиморфизм в плюсах просто сильнее динамического
Например, в динамический полиморфизм нельзя протаскивать постоянные класса (предложение по constexpr virtual еще не готово :( )
Я уже молчу, что tag dispatching еще расскажет своих книг александреску

Александр
03.10.2018
21:14:57

Admin
ERROR: S client not available

Александр
03.10.2018
21:15:09
а вот тут вообще куча крутых штук:
https://github.com/gcc-mirror/gcc/tree/e3cb810239595334bc66762574cb539af28bc1e6/gcc/testsuite/g%2B%2B.dg/cpp2a

Constantine
03.10.2018
21:22:17

Google

Constantine
03.10.2018
21:24:04
кстати, я вот тут подумал, а почему бы не
[] (bool b, auto&& x) -> std::optional {
if (!b)
return std::nullopt;
return std::forward<decltype(x)>(x);
}
правило такое: если есть auto -> template, то выполняются deduction guide по всем возвратам и все, которые выполнились, должны совпасть, и хотя бы один должен выполниться
т.е. обычное вычисление auto с точностью до того, что ошибка deduction guide not an error but skip


Alex Фэils?︙
03.10.2018
22:52:56
кидай сюда
Я обычно предлагаю людям посмотреть на программы, написанные языках из которых выбираешь...
На C# есть хорошие программы, но они ТОЛЬКО для Windows (есть пара исключений, но их крайне мало)
На Java я знаю всего 3 хорошие программы, и одна из них - это среда разработки для C++. Всё остальное - программы "однодневки" для нужд сомнительных фирм.
На C++ все игровые движки, браузеры, операционки (в том числе внутренности Android), компиляторы, высоконагруженные серверы (работающие на любой ОС), обработка изображений и прочая графика, торговые системы, базы данных, немного embedded...
Поспрашивай в других чатиках, какие хорошие программы есть на языке программирования X и сделай выбор
ну, почти, я на C# пишу на иось на одной из работ ?
спасибо


Firstname
04.10.2018
07:35:05
Слушайте у меня интересный вопрос возник
А как отлаживать происходящие внутри присваивания/прочие штуки в move семантике

Simon
04.10.2018
07:36:22
Бряку ставить в операторах конструирования/присваивания?

Firstname
04.10.2018
07:36:25
Ну тоесть, не через print отлаживаться а как-то встроенными методами
бряка это точка останова?

Valery
04.10.2018
07:36:46
Ага.

Simon
04.10.2018
07:36:52
Ага!

Andrew
04.10.2018
07:38:20
Вообще статический полиморфизм в плюсах просто сильнее динамического
Я решил почитать, как делается type erasure, чтобы точно вспомнить, и мне кажется, что там 3 вызова: (1) разыменование unique_ptr на concept, (2)виртуальный вызов метода в concept дает проход в vtable из которой (3) проход в реализацию метода в классе.
А вызов у базового класса при дин. полиморфизме даст 2 прохода по указателям.
ЧЯДНТ? Это я про плохие type erasure прочитал?

Firstname
04.10.2018
07:45:43
Ага.
не ожидал тебя тут видить))))

Valery
04.10.2018
07:46:08
А я вчера примерно пришел сюда.
Вспомнил, что рассазывали про этот чатик.

Google

Firstname
04.10.2018
07:46:28
а какие по дефолту стандартные конструкторы/копировшики создаются компилятором?
)))
понял