Re[57]: Исповедь C++ника
От: Тёмчик Австралия жж
Дата: 02.01.21 18:03
Оценка: :)
Здравствуйте, so5team, Вы писали:

S>>>Покажите C++ников в этой теме, которые бы твердили "C++ всех быстрее". С ссылками и цитатами.

Тё>>Вы сами твердили в споре про sentinel node и демонстрировали непонимание предмета.

S>Если я это твердил, то вам не составит труда дать ссылку на конкретную цитату.

http://rsdn.org/forum/job/7913002.1
Автор: so5team
Дата: 26.12.20

S>Кроме того, приведенный выше код можно считать документально зафиксированным подтверждением того, что местный Тёмчик говнокодер, неспособный в простейшие структуры данных. Ибо такая наивная реализация изъятия элемента из двусвязного списка без проверки на null значений node.prev/node.next -- это про*б сравнимый с неспособностью развернуть строку. Тёмчик, почему меня не удивляет факт того, что вы говнокодер?


Тё>>А когда я предложил решение на ёлку залезть (O(1)) и непоцарапаться (cache locality), вы перешли на оскорбления.


S>Было предложение хранить ноды в преаллоцированном векторе фиксированного размера. За такое сразу в сад. Ибо если есть возможность заранее предсказать количество подписок, то пляски с динамическими контейнерами не нужны.

http://rsdn.org/forum/job/7913532.1
Автор: Тёмчик
Дата: 27.12.20

S>Пока что вырисовывается приблизительно такая картина:
Скрытый текст
S>
S>template<typename T>
S>class SubscriptionStorage {
S>public:
S> struct Unsubscription {
S> virtual ~Unsubscription() = default;

S> virtual void unsubscribe() noexcept = 0;
S> };

S> [nodiscard]]
S> Unsubscription * subscribe(T && value);

S> ...

S>private:
S> struct Link {
S> virtual ~Link() = default;
S> Link * prev_;
S> Link * next_;
S> };

S> struct OneSubscription : public Link, public Unsubscription {
S> T payload_;
S> ...
S> void unsubscribe() override {
S> ... // Вычеркивание из списка.
S> delete this; // Уничтожение узла.
S> }
S> }

S> Link sentinel_;
S>};

S>template<typename T>
S>Unsubscription * SubscriptionStorage::subscribe(T && value) {
S> return new OneSubscription(std::move(value), ...);
S>}
S>


Примерно так, только названия поменять:

Unsubscription => Subscription (подписка)
SubscriptionStorage => ObservableImpl
Link => Node
OneSubscription => SubscriptionNode

sentinel иницировать в конструкторе:
sentinel.next = sentinel.prev = sentinel.

Можно ещё поиграться с пре-инициализацией кэша SubscriptionNode как цикличного списка, и чтобы ObservableImpl брал Node оттуда в свой список, а при unsubscribe возвращал обратно. Будет тебе тогда cache locality и избежание динамического выделения памяти:
SubscriptionNode[2048] nodeCache;



http://rsdn.org/forum/job/7913552.1
Автор: so5team
Дата: 27.12.20

Тё>sentinel иницировать в конструкторе:
Тё>sentinel.next = sentinel.prev = sentinel.

За такие инициализации в конструкторе в C++ со времен 1990-х по рукам бъют. Но откуда вам знать-то.

Тё>Можно ещё поиграться с пре-инициализацией кэша SubscriptionNode как цикличного списка, и чтобы ObservableImpl брал Node оттуда в свой список, а при unsubscribe возвращал обратно. Будет тебе тогда cache locality и избежание динамического выделения памяти:
Тё>
Тё>SubscriptionNode[2048] nodeCache;
Тё>


Тёмчик, да вы мало того, что зведун, так еще и архитектор-астронавт? Предложить мутную и сложную схему с большими накладными расходами и звиздеть, что это правильный дизайн.



Достаточно привёл цитат? Вы сами завели объект sentinel в теле SubscriptionStorage, а потом докопались, в оскорбительной форме "со времен 1990-х по рукам бъют" SubscriptionStorage присваивать указатель на поле из тела SubscriptionStorage.


S>просьба обратить строку от чайника, который не в курсе, какие способы представления строк встречаются в природе, она о многом говорит. О многом плохом, касающемся конторы.

In computer programming, a string is traditionally a sequence of characters

Open-ended question предполагает задать мутный вопрос, и ожидается наводящий вопрос от кандидата- например, про в каком представлении, а может даже и в какой кодировке.
Я продолжаю задавать написать функцию "перевернуть строку", но сразу с сигнатурой reverseString(char[] a): void — больше никаких open-ended.

S>>>Тёмчик, еще раз: у некоторых из тех, кого вы называете "не знающими алгоритмы плюсодрочерами" в OpenSource десятки тысяч строк код.

Тё>>Мне неинтересно читать ваш отлаженный код.

S>Тогда закройте рот и не звиздите о чужой квалификации. Если вам что-то кажется, то ноги в руки и бегом в религиозное заведение. А если рот публично открываете и пытаетесь на кого-то наезжать, то потрудитесь свои наезды аргументировать.

Я не наезжаю на вас неаргументированно. Только по делу. И ваша библиотека в опен сорсе мне неактуальна. Может быть, она неплохая, я не знаю. Для меня актуальна http://reactivex.io/.

S>Когда вы здесь просили отревьювить ваш код, то вам высказали предметные замечания. Из которых как раз таки ваш уровень стал понятен.

Набросились, коршуны . Я перестал писать на C++ до введений C++ 11. Ну да, неправильно использовал emplace_back. Это страшный грех, учитывая, что этих вещей не было в моё время в C++?

S>Я указал на то, как должны инициализироваться члены класса. И на то, что вы, не зная, как это делается должным образом, не владеете инструментом, о применимости которого делаете здесь громкие заявления. Т.е. откровенно звиздите о том, в чем не разбираетесь.

Я привёл ваши цитаты выше, как вы и просили. Вы так брызжете слюной, а вот мне непонятно, что в этот раз не так-то. Нету там умных указателей и их неправильного использования. Мой код приведён как "псевдо код на доске", для объяснения. А уж вы можете его переделать с учётом вашей экспертизы в C++ 20.

S>В этом камень преткновения. А не в том, что какие-то мифические сиплюспоюсники в вакууме свято верят в самый быстрый на свете C++.

Не мифические. Вы и хайлендер- яркие представители.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.