Информация об изменениях

Сообщение Re[22]: Исповедь C++ника от 26.12.2020 10:50

Изменено 26.12.2020 10:54 Артём

Re[22]: Исповедь C++ника
Здравствуйте, so5team, Вы писали:

S>Я про случай с небольшим количеством подписчиков говорил с самого начала: http://rsdn.org/forum/job/7911770.1
Автор: so5team
Дата: 24.12.20

Небольное количество подписчиков яйца выеденного не стоит. Можете их хоть квадратично перебирать

S>>>Вы заявили следующее (http://rsdn.org/forum/job/7907304.1):
Автор: Тёмчик
Дата: 17.12.20

Тё>>Реалтайм бывает soft и hard. Soft вообще похрен на чём делать, а для hard плюсы не подходят (если не рассматривать C с классами).

S>Т.е. когда вас прижали к стенке вашей же цитатой, то вы переобуваетесь и признаете, что речь таки шла про рилтайм. ЧТД.

Признаю диванное поражение от более умелого бойца.

S>>>Тёмчик, давайте говорить о примере от B0FEE664. В котором под T можно подразумевать только std::pair<OnPress, void*>. Если вы хотите ввести в обсуждение еще что-то, то потрудитесь это описать, чтобы люди понимали, о чем речь.

Тё>>Почему у вас onpress в типе? Почему у вас void*? Вы что, про статическую типизацию не слыхали?

S>Это не у меня. Это у человека, который написал пример, приведенный B0FEE664. А тому человеку, возможно (и скорее всего) нужно было в качестве callback-ов использовать чисто сишные функции. А это может потребоваться по разным причинам, начиная от использования легаси-кода и заканчивая интеграцией C++ного кода и кода на каком-нибудь Lua или Python (из которых наружу торчат C-шные интерфейсы).

Про интеграцию с чужим API — почитайте про https://en.wikipedia.org/wiki/Visitor_pattern

S>>>Т.е. вы для хранения списка подписок предлагаете хранить еще и специальный sentinel node?

Тё>>Я не "предлагаю" — это оптимизация связного списка для упрощения его операций, почитайте, учиться ведь всегда полезно.

S>Так ведь я не про упрощение, а про связанные с этим расходы.

Вот и подумайте про сокращение "C" в формуле C*O(...).

S>>>Подписчик.

Тё>>Ну вот ваш подписчик должен хранить интерфейс для отписки. Может хранить пачку таких подписок в списке, и отписываться в деструкторе, например.

S>Или он просто хранит у себя указатель на Button и вызывает RemoveOnButtonPress в нужных ему местах.

Блиииин ну это же рафинированный говнокод.

S>>>На словах все герои. Только вот если у вас отписка работает через поиск (по указателю на callback или по какому-то уникальному Id), то она оказывается более устойчивой к подобным ошибкам.

Тё>>Т.е. вы смирились с фактом, что в вашем говнокоде нет определённости, придёт отписка дважды, или вообще не придёт. И поэтому вы городите тормозной кривой код, оправдывая это порно "локальным кэшем".

S>Мой говнокод, в отличии от вашего идеального, свободно лежит в открытом доступе. И любой желающий может посмотреть и сделать выводы. В отличии от.

Я не обсуждал в этой ветке ваш репозиторий. Сконцентрируйтесь.

Тё>>Возвращается ссылка на интерфейс Subscription. Это может быть наследник от Node имплементирующий Subscription. О каком каком копировании вы поёте?


S>Тёмчик, мы же про C++ говорим, здесь вы не можете вернуть "интерфейс". Вам нужно возвращать либо экземпляр конкретного класса (и тогда сталкиваться с проблемой копирования экземпляров), либо возвращать (умный) указатель на реализацию интерфейса со всеми вытекающими для этого последствиями.


https://en.cppreference.com/w/cpp/language/abstract_class
Re[22]: Исповедь C++ника
Здравствуйте, so5team, Вы писали:

S>Я про случай с небольшим количеством подписчиков говорил с самого начала: http://rsdn.org/forum/job/7911770.1
Автор: so5team
Дата: 24.12.20

Небольное количество подписчиков яйца выеденного не стоит. Можете их хоть квадратично перебирать

S>>>Вы заявили следующее (http://rsdn.org/forum/job/7907304.1):
Автор: Тёмчик
Дата: 17.12.20

Тё>>Реалтайм бывает soft и hard. Soft вообще похрен на чём делать, а для hard плюсы не подходят (если не рассматривать C с классами).

S>Т.е. когда вас прижали к стенке вашей же цитатой, то вы переобуваетесь и признаете, что речь таки шла про рилтайм. ЧТД.

Признаю диванное поражение от более умелого бойца.

S>>>Тёмчик, давайте говорить о примере от B0FEE664. В котором под T можно подразумевать только std::pair<OnPress, void*>. Если вы хотите ввести в обсуждение еще что-то, то потрудитесь это описать, чтобы люди понимали, о чем речь.

Тё>>Почему у вас onpress в типе? Почему у вас void*? Вы что, про статическую типизацию не слыхали?

S>Это не у меня. Это у человека, который написал пример, приведенный B0FEE664. А тому человеку, возможно (и скорее всего) нужно было в качестве callback-ов использовать чисто сишные функции. А это может потребоваться по разным причинам, начиная от использования легаси-кода и заканчивая интеграцией C++ного кода и кода на каком-нибудь Lua или Python (из которых наружу торчат C-шные интерфейсы).

Про интеграцию с чужим API — почитайте про https://en.wikipedia.org/wiki/Visitor_pattern

S>>>Т.е. вы для хранения списка подписок предлагаете хранить еще и специальный sentinel node?

Тё>>Я не "предлагаю" — это оптимизация связного списка для упрощения его операций, почитайте, учиться ведь всегда полезно.

S>Так ведь я не про упрощение, а про связанные с этим расходы.

Вот и подумайте про сокращение "C" в формуле C*O(...). Никто вам в C++ не помешает разместить sentinel node в поле цикличного списка по значению.

S>>>Подписчик.

Тё>>Ну вот ваш подписчик должен хранить интерфейс для отписки. Может хранить пачку таких подписок в списке, и отписываться в деструкторе, например.

S>Или он просто хранит у себя указатель на Button и вызывает RemoveOnButtonPress в нужных ему местах.

Блиииин ну это же рафинированный говнокод.

S>>>На словах все герои. Только вот если у вас отписка работает через поиск (по указателю на callback или по какому-то уникальному Id), то она оказывается более устойчивой к подобным ошибкам.

Тё>>Т.е. вы смирились с фактом, что в вашем говнокоде нет определённости, придёт отписка дважды, или вообще не придёт. И поэтому вы городите тормозной кривой код, оправдывая это порно "локальным кэшем".

S>Мой говнокод, в отличии от вашего идеального, свободно лежит в открытом доступе. И любой желающий может посмотреть и сделать выводы. В отличии от.

Я не обсуждал в этой ветке ваш репозиторий. Сконцентрируйтесь.

Тё>>Возвращается ссылка на интерфейс Subscription. Это может быть наследник от Node имплементирующий Subscription. О каком каком копировании вы поёте?


S>Тёмчик, мы же про C++ говорим, здесь вы не можете вернуть "интерфейс". Вам нужно возвращать либо экземпляр конкретного класса (и тогда сталкиваться с проблемой копирования экземпляров), либо возвращать (умный) указатель на реализацию интерфейса со всеми вытекающими для этого последствиями.


https://en.cppreference.com/w/cpp/language/abstract_class