@ProCxx

Страница 2403 из 2477
Aidar
03.10.2018
18:53:45
Чтобы было по классике

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
окей, прост захотелось поэксперементировать ?
Проблема с подходом в том, что основной функционал в твоём полиморфным классе оказывается неполиморфным)

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

Yarique
03.10.2018
18:59:21
вообще моя интерпретация проблемы начинается с вопроса WTF происходит и зачем это нужно, учитывая, что это cancel асинхронной среды (ничего не делать)
с этого и началось "рвение" посмотреть "а что если" и очнулся объединив шаблончики и чистые виртуальные функции ?

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
Я бы назвал "притянутая за уши необходимость в джаваполиморфизме"
А если ISession родился позднее как type erase, то это уже по феншую? Просто у меня было такое, что внезапно оказывался нужен и рантайм полиморфизм, а как лучше сделать хз.

Igor
03.10.2018
20:28:45
Привет. А код из доклада Chandler Carruth “Spectre: Secrets, Side-Channels, Sandboxes, and Security” с последнего cppcon выложен? Не натыкался никто?
они обычно ссылки прямо под видео постят в описании если нету, значит ещё не выложили, если только у самого автора на слайде нету

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

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

Constantine
03.10.2018
20:32:14
Не, мне именно чтобы выбирать реализацию по параметрам в рантайме.
Это не повод делать наследование и писать java-стиль, это повод написать type erasure

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

Max
03.10.2018
20:36:23
А как красиво выбирать реализацию в рантайме без полиморфизма?
В представленном коде собственно обрезан динамический полиморфизм -- асинк-методы будут для базы выбираться всегда.

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

Constantine
03.10.2018
20:40:41
А как красиво выбирать реализацию в рантайме без полиморфизма?
Нужно просто полиморфизм делать в последний момент

Andrew
03.10.2018
20:41:45
В представленном коде собственно обрезан динамический полиморфизм -- асинк-методы будут для базы выбираться всегда.
Я не понял, в чем проблема в примере, все же работает. Если потом понадобится другая реализация, то будет еще 1 класс Session1 : public BaseSession, в котором будут свои определения virtual функций, и поэтому будет вызываться новая реализация. Шаблонные функции в BaseSession выглядят ок, т.к. используют pure virtual private методы, которые и определяют реализацию. Короче, я не вижу проблемы.

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

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
В динамическом полиморфизме вы должны будете это ручками в каждый класс и все классы финалить для такого эффекта
Справедливости ради, нет, я напишу невиртуальный before_and_after в базовом классе.

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
Например, в динамический полиморфизм нельзя протаскивать постоянные класса (предложение по constexpr virtual еще не готово :( )
как это не готово? https://github.com/gcc-mirror/gcc/blob/e3cb810239595334bc66762574cb539af28bc1e6/gcc/testsuite/g%2B%2B.dg/cpp2a/constexpr-virtual1.C

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
как это не готово? https://github.com/gcc-mirror/gcc/blob/e3cb810239595334bc66762574cb539af28bc1e6/gcc/testsuite/g%2B%2B.dg/cpp2a/constexpr-virtual1.C
вангую там про другое, речь про виртуальные функции с обязательным constexpr при наследовании

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++ с помощью IL2CPP

спасибо

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
а какие по дефолту стандартные конструкторы/копировшики создаются компилятором?

)))

понял

Страница 2403 из 2477