про многословность
От: ononim  
Дата: 29.01.25 19:00
Оценка: +4 :))) :))) :))
Вот раньше все было кр.и.пнтно: std, fopen, open, malloc/realloc.
А теперь: std::unordered_map std::chrono::duration::seconds std::strong_ordering::greater
Ватафак? Что за словоблудие? Я считаю комьюнити должно найти сильно разговорчивых членов комитета и расстрелять их. Ведь болтун — находка для шпиона. В данном случае — для раста.
Как много веселых ребят, и все делают велосипед...
Re: про многословность
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 29.01.25 19:45
Оценка: +1
Здравствуйте, ononim, Вы писали:

O>Вот раньше все было кр.и.пнтно: std, fopen, open, malloc/realloc.


И было тривиально легко подраться за символ в какой-то программе, просто не зная, что он уже есть в библиотеке или в соседнем модуле.

O>А теперь: std::unordered_map std::chrono::duration::seconds std::strong_ordering::greater

O>Ватафак? Что за словоблудие? Я считаю комьюнити должно найти сильно разговорчивых членов комитета и расстрелять их. Ведь болтун — находка для шпиона. В данном случае — для раста.

Он стремится туда же, с мелкими поправками. И это правильно.
The God is real, unless declared integer.
Re: про многословность
От: Pzz Россия https://github.com/alexpevzner
Дата: 29.01.25 20:52
Оценка: :)))
Здравствуйте, ononim, Вы писали:

O>Вот раньше все было кр.и.пнтно: std, fopen, open, malloc/realloc.

O>А теперь: std::unordered_map std::chrono::duration::seconds std::strong_ordering::greater
O>Ватафак? Что за словоблудие? Я считаю комьюнити должно найти сильно разговорчивых членов комитета и расстрелять их. Ведь болтун — находка для шпиона. В данном случае — для раста.

Очень много символов. Всем нравится называть функцию open или close. Поэтому приходится использовать или длинные имена, или пространства имён. Но поскольку в мире C++ стоит бардак полный, используется и то и другое.
Re[2]: про многословность
От: T4r4sB Россия  
Дата: 29.01.25 20:58
Оценка: +3
Здравствуйте, netch80, Вы писали:

N>Он стремится туда же, с мелкими поправками. И это правильно.


Что правильного в том, что я каждый раз заново гуглю, чтобы измерить время либо добавить в программу ГПСЧ? Потому что эту идеологически выдержанную херабору невозможно блин запомнить.
В отличие от
srand(time(NULL));
...
int i = rand() % n;
...
Нет такой подлости и мерзости, на которую бы не пошёл gcc ради бессмысленных 5% скорости в никому не нужном синтетическом тесте
Re[2]: про многословность
От: ononim  
Дата: 29.01.25 21:10
Оценка: +3 :)))
O>>Вот раньше все было кр.и.пнтно: std, fopen, open, malloc/realloc.
N>И было тривиально легко подраться за символ в какой-то программе, просто не зная, что он уже есть в библиотеке или в соседнем модуле.
Вот я пишу на плюсах с 2000года примерно. И вот ни разу у меня не было проблемы что моя функция подралася с open/fopen и тп. Мне это во всяком случае не запомнилось.
А вот как написали рядом, факт того что все эти std::chrono и std::strong_ordering приходится каждый раз гуглить — напрягает с тех пор как придумали с++17.
А если гугл отключат? Вы понимаете что цивилизация упадет в нищету и начнет со скуки строить пирамиды, потому что никто не сможет вспомнить как правильно написать оператор космического корабля?

O>>А теперь: std::unordered_map std::chrono::duration::seconds std::strong_ordering::greater

O>>Ватафак? Что за словоблудие? Я считаю комьюнити должно найти сильно разговорчивых членов комитета и расстрелять их. Ведь болтун — находка для шпиона. В данном случае — для раста.
N>Он стремится туда же, с мелкими поправками. И это правильно.
Я считаю что многословность человеческих языков — это изобретенный эволюцией и социумом метод избыточного кодирования информации, чтобы сказки передавались из поколения в поколения не теряя смысла и всякие гонцы, которых посылали пешкодралом в соседнее королевство с устной речью, хоть чтото запомнили и передали, даже с бодуна. В современном мире с этой функцией гораздо лучше справляются коды Рида Соломона и на более высоком уровне можно считать что текстовая информация искажениям не подвергается, а следовательно можно излагать мысли кртко.
Как много веселых ребят, и все делают велосипед...
Re[3]: про многословность
От: Alekzander Россия  
Дата: 29.01.25 21:30
Оценка:
Здравствуйте, ononim, Вы писали:

O>>>Вот раньше все было кр.и.пнтно: std, fopen, open, malloc/realloc.

N>>И было тривиально легко подраться за символ в какой-то программе, просто не зная, что он уже есть в библиотеке или в соседнем модуле.
O>Вот я пишу на плюсах с 2000года примерно. И вот ни разу у меня не было проблемы что моя функция подралася с open/fopen и тп. Мне это во всяком случае не запомнилось.
O>А вот как написали рядом, факт того что все эти std::chrono и std::strong_ordering приходится каждый раз гуглить — напрягает с тех пор как придумали с++17.
O>А если гугл отключат? Вы понимаете что цивилизация упадет в нищету и начнет со скуки строить пирамиды, потому что никто не сможет вспомнить как правильно написать оператор космического корабля?

Почему-то на шарпе у меня вообще не было проблем с тамошней длиной и многословностью. А в плюсах есть.
В мире мудрых мыслей: «Иди на нефильтрованный там загон для врагов и щизофреников» (VladD2).
Re: про многословность
От: rg45 СССР  
Дата: 29.01.25 21:56
Оценка: +1 :))) :)
Здравствуйте, ononim, Вы писали:

O>Вот раньше все было кр.и.пнтно: std, fopen, open, malloc/realloc.

O>А теперь: std::unordered_map std::chrono::duration::seconds std::strong_ordering::greater
O>Ватафак? Что за словоблудие? Я считаю комьюнити должно найти сильно разговорчивых членов комитета и расстрелять их. Ведь болтун — находка для шпиона. В данном случае — для раста.

Ну, остались же std::cin и std::cout. Вот ими и пользоваться.
--
Справедливость выше закона. А человечность выше справедливости.
Re: про многословность
От: Великий Реверс google
Дата: 29.01.25 21:56
Оценка: :))
очевидно язык вас перерос

а вообще Евгений МузыченкО
перелогинтесь
Re[3]: про многословность
От: m2user  
Дата: 29.01.25 23:33
Оценка: +1
O>А если гугл отключат? Вы понимаете что цивилизация упадет в нищету и начнет со скуки строить пирамиды, потому что никто не сможет вспомнить как правильно написать оператор космического корабля?

Archives for offline viewing
https://en.cppreference.com/w/Cppreference:Archives
Re[3]: про многословность
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 30.01.25 04:50
Оценка:
Здравствуйте, T4r4sB, Вы писали:

N>>Он стремится туда же, с мелкими поправками. И это правильно.


TB>Что правильного в том, что я каждый раз заново гуглю, чтобы измерить время либо добавить в программу ГПСЧ? Потому что эту идеологически выдержанную херабору невозможно блин запомнить.


Ты смешиваешь две совершенно разные вещи, и я не уверен, что не намеренно: 1) Сложность API; 2) Длина названий.

Тривиально построить объект на десяток строк, который будет твой пример с rand() заворачивать в себя с достаточной длиной и значений, и цикла (как делают например в mt19937 и чего нет в rand).

И точно так же можно на сишном API с именами в один уровень и аббревиатурами построить что-то сверхсложное. Почитай, например, про sendmsg.
The God is real, unless declared integer.
Re[3]: про многословность
От: cppguard  
Дата: 30.01.25 05:02
Оценка:
Здравствуйте, ononim, Вы писали:

O>>>Вот раньше все было кр.и.пнтно: std, fopen, open, malloc/realloc.

N>>И было тривиально легко подраться за символ в какой-то программе, просто не зная, что он уже есть в библиотеке или в соседнем модуле.
O>Вот я пишу на плюсах с 2000года примерно. И вот ни разу у меня не было проблемы что моя функция подралася с open/fopen и тп. Мне это во всяком случае не запомнилось.
O>А вот как написали рядом, факт того что все эти std::chrono и std::strong_ordering приходится каждый раз гуглить — напрягает с тех пор как придумали с++17.
O>А если гугл отключат? Вы понимаете что цивилизация упадет в нищету и начнет со скуки строить пирамиды, потому что никто не сможет вспомнить как правильно написать оператор космического корабля?

С++, разумеется, какашка, но есть cppreference с локальной установкой в браузер, так что в нищету не упадём. Я пользуюсь, когда уезжаю далеко от цивилизации. Для извращенцев есть вариант в виде man pages.
Re[3]: про многословность
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 30.01.25 05:03
Оценка:
Здравствуйте, ononim, Вы писали:

O>>>Вот раньше все было кр.и.пнтно: std, fopen, open, malloc/realloc.

N>>И было тривиально легко подраться за символ в какой-то программе, просто не зная, что он уже есть в библиотеке или в соседнем модуле.
O>Вот я пишу на плюсах с 2000года примерно. И вот ни разу у меня не было проблемы что моя функция подралася с open/fopen и тп. Мне это во всяком случае не запомнилось.

А у меня дралось. Навскидку — с access(), getlogin(), log() (кто-то решил её определить для логгирования, логично же! (каламбур не намеренно), clear(), надоело дальше смотреть подсказки. Борьба с этим, как обычно — префиксы, но в отличие от C++ namespaces надо их писать каждый раз.

O>А вот как написали рядом, факт того что все эти std::chrono и std::strong_ordering приходится каждый раз гуглить — напрягает с тех пор как придумали с++17.


Про chrono — могу только повторить, что писал только что рядом — что сложность самого API и длина идентификаторов — это несвязанные понятия. cmsg в Unix или всякие SECURITY_DESCRIPTOR в Windows — классические примеры, как без пространств имён можно сделать такое, что без бутылки не разберёшься, как его использовать.
Зато вынесение связанных понятий чего-то сложного в одно пространство имён — на пользу.

Так что выставляйте претензии не тем, кто внёс всё временно́е в std::chrono, а тем, кто его сделал таким убойно универсальным, что фиг запомнишь, где там именно нужно втыкать хреновину в шиздюлину (или наоборот?) и закреплять погребенью.

O>А если гугл отключат? Вы понимаете что цивилизация упадет в нищету и начнет со скуки строить пирамиды, потому что никто не сможет вспомнить как правильно написать оператор космического корабля?


А вы понимаете, что то же программирование уже существовало полвека без гугла и с ним спокойно обходились печатными материалами? Или не хотите помнить?

Я вообще не понимаю смысл такого сравнения — "гугл отключат" (херасе, чтобы "отключили" и гугл и яндекс и всех прочих, это что ж сделать надо), но если и так, то опыт наших родителей показывает, что проблема решалась задолго до.

O>Я считаю что многословность человеческих языков — это изобретенный эволюцией и социумом метод избыточного кодирования информации, чтобы сказки передавались из поколения в поколения не теряя смысла и всякие гонцы, которых посылали пешкодралом в соседнее королевство с устной речью, хоть чтото запомнили и передали, даже с бодуна. В современном мире с этой функцией гораздо лучше справляются коды Рида Соломона и на более высоком уровне можно считать что текстовая информация искажениям не подвергается, а следовательно можно излагать мысли кртко.


От замены std::chrono::duration::seconds на std::chr::dur::sc или даже std.chr.dur.sc легче не станет.
The God is real, unless declared integer.
Re: про многословность
От: tapatoon  
Дата: 30.01.25 05:12
Оценка:
Здравствуйте, ononim, Вы писали:

O>...


В каменном веке весь код приходилось писать руками. Это потом подвезли подсказки и автокомплит. Может поэтому и решили не экономить на длине.
Центр ИПсО Сил Специальных Операций
Re[4]: про многословность
От: Doom100500 Израиль  
Дата: 30.01.25 07:00
Оценка:
Здравствуйте, Alekzander, Вы писали:

A>Почему-то на шарпе у меня вообще не было проблем с тамошней длиной и многословностью. А в плюсах есть.


Так там студия всё автоматоматом схлопывает в юзинги, а в плюсах это считается моветоном и "линейкой по рукам".

PS сам против юзингов, максимум — короткий псевдоним на namespace.
Спасибо за внимание
Re[4]: про многословность
От: ononim  
Дата: 31.01.25 10:24
Оценка:
N>От замены std::chrono::duration::seconds на std::chr::dur::sc или даже std.chr.dur.sc легче не станет.
std::age::sec а duration не нужен, или вообще лучше std::seconds

кстати они немножко начали осознавать:

inline constexpr std::strong_ordering equivalent
a valid value indicating equivalence (neither ordered before nor ordered after), the same as equal
(public static member constant)
inline constexpr std::strong_ordering equal
a valid value indicating equivalence (neither ordered before nor ordered after), the same as equivalent
(public static member constant)

думаю скоро добавят std::strong_ordering::operator=(int v) а позже еще и дойдут до человеческого std::equal и (для особенных) std::weak_equal и тп, а тип — std::cmp std::weak_cmp
и хорошо что shared_ptr придумали до комитета, иначе был бы std::pointer::reference_counted::strong и std::pointer::reference_counted::weak, но к сожалению с hash_map это не прокатило, трындючие ящики таки утрындели приверженцев здравого смысла.
Как много веселых ребят, и все делают велосипед...
Отредактировано 31.01.2025 11:10 ononim . Предыдущая версия . Еще …
Отредактировано 31.01.2025 10:35 ononim . Предыдущая версия .
Отредактировано 31.01.2025 10:35 ononim . Предыдущая версия .
Отредактировано 31.01.2025 10:34 ononim . Предыдущая версия .
Отредактировано 31.01.2025 10:33 ononim . Предыдущая версия .
Отредактировано 31.01.2025 10:33 ononim . Предыдущая версия .
Отредактировано 31.01.2025 10:31 ononim . Предыдущая версия .
Re[2]: про многословность
От: ononim  
Дата: 31.01.25 10:37
Оценка:
O>>...
T>В каменном веке весь код приходилось писать руками. Это потом подвезли подсказки и автокомплит. Может поэтому и решили не экономить на длине.
вот бы теперь подвезли автодекомплит, для тех кто по-прежнему читает глазами
Как много веселых ребят, и все делают велосипед...
Re[4]: про многословность
От: _NN_  
Дата: 01.02.25 11:58
Оценка: 18 (2) +1
Здравствуйте, cppguard, Вы писали:

https://devdocs.io/
Можно скачать локально.
Умеет не только C++.
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[5]: про многословность
От: rg45 СССР  
Дата: 01.02.25 12:04
Оценка:
Здравствуйте, _NN_, Вы писали:

_NN>Здравствуйте, cppguard, Вы писали:


_NN>https://devdocs.io/

_NN>Можно скачать локально.
_NN>Умеет не только C++.

А джавы и сишарпа нету. Как же так?
--
Справедливость выше закона. А человечность выше справедливости.
Re[6]: про многословность
От: · Великобритания  
Дата: 02.02.25 12:10
Оценка: +1
Здравствуйте, rg45, Вы писали:

r> _NN>https://devdocs.io/

r> _NN>Можно скачать локально.
r> _NN>Умеет не только C++.
r> А джавы и сишарпа нету. Как же так?
OpenJDK есть. Вот только не понимаю зачем. Если у тебя есть установленная jdk с сорцами, там все доки будут локально, прямо из IDE. И не только jdk, а практически любая либа. То же касается многих вещей там вроде git.
avalon/3.0.0
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[7]: про многословность
От: rg45 СССР  
Дата: 02.02.25 12:26
Оценка:
Здравствуйте, ·, Вы писали:

·>OpenJDK есть.


Ну это JDK. А сам язык? Как мне написать мой первый "Hello World"?
--
Справедливость выше закона. А человечность выше справедливости.
Re[8]: про многословность
От: · Великобритания  
Дата: 02.02.25 13:00
Оценка:
Здравствуйте, rg45, Вы писали:

r> ·>OpenJDK есть.

r> Ну это JDK. А сам язык? Как мне написать мой первый "Hello World"?
Ну вроде там все доки это reference, а не tutorials. А учебники уж очень разные. Смотря какой ты "Hello World" хочешь, консольный, или гуй, или веб, или rest-сервис в докер и т.п.
avalon/3.0.0
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[9]: про многословность
От: rg45 СССР  
Дата: 02.02.25 13:03
Оценка:
Здравствуйте, ·, Вы писали:

·>Ну вроде там все доки это reference, а не tutorials. А учебники уж очень разные. Смотря какой ты "Hello World" хочешь, консольный, или гуй, или веб, или rest-сервис в докер и т.п.


Конечно, все это references. Только для C++ есть references по языку, для Java нету.
--
Справедливость выше закона. А человечность выше справедливости.
Отредактировано 02.02.2025 13:03 rg45 . Предыдущая версия .
Re[10]: про многословность
От: · Великобритания  
Дата: 02.02.25 13:07
Оценка:
Здравствуйте, rg45, Вы писали:

R>·>Ну вроде там все доки это reference, а не tutorials. А учебники уж очень разные. Смотря какой ты "Hello World" хочешь, консольный, или гуй, или веб, или rest-сервис в докер и т.п.

R>Конечно, все это references. Только для C++ есть references по языку,
Который ты имеешь в виду?

R>для Java нету.

Ну можно выкачать в оффлайн ~1000 страниц пдфку JLS... Но это не про hello world...
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[11]: про многословность
От: rg45 СССР  
Дата: 02.02.25 13:17
Оценка:
Здравствуйте, ·, Вы писали:

R>>Конечно, все это references. Только для C++ есть references по языку,

·>Который ты имеешь в виду?

Вот этот, например: https://devdocs.io/cpp/language. И не только это, там много ещё есть интересного во вкладках "Language", "Keywords", "Metaprogramming", etc, что относится сугубо к языку.

Среди прочего, есть документация по функции main: https://devdocs.io/cpp/language/main_function, которой более чем достаточно, для написания "Hello World".

R>>для Java нету.

·>Ну можно выкачать в оффлайн ~1000 страниц пдфку JLS... Но это не про hello world...

Ну это-то понятно, что много чего можно выкачать.
--
Справедливость выше закона. А человечность выше справедливости.
Re[12]: про многословность
От: · Великобритания  
Дата: 02.02.25 13:37
Оценка:
Здравствуйте, rg45, Вы писали:

R>·>Который ты имеешь в виду?

R>Вот этот, например: https://devdocs.io/cpp/language. И не только это, там много ещё есть интересного во вкладках "Language", "Keywords", "Metaprogramming", etc, что относится сугубо к языку.
А, ну аналог jls, да.

R>Среди прочего, есть документация по функции main: https://devdocs.io/cpp/language/main_function, которой более чем достаточно, для написания "Hello World".

на это похоже https://docs.oracle.com/javase/specs/jls/se21/html/jls-1.html#jls-1.2

R>·>Ну можно выкачать в оффлайн ~1000 страниц пдфку JLS... Но это не про hello world...

R>Ну это-то понятно, что много чего можно выкачать.
Угу... И неясно накой этот devdocs.io. Док слишком много, чтобы слить все в одну кучу, да так чтобы в оффлайн кеш браузера уместилось. И вот https://devdocs.io/offline "вдохновляет"

Note: your browser may delete DevDocs's offline data if your computer is running low on disk space and you haven't used the app in a while.

но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[13]: про многословность
От: rg45 СССР  
Дата: 02.02.25 13:45
Оценка:
Здравствуйте, ·, Вы писали:

·>Угу... И неясно накой этот devdocs.io. Док слишком много, чтобы слить все в одну кучу, да так чтобы в оффлайн кеш браузера уместилось. И вот https://devdocs.io/offline "вдохновляет"

·>

Note: your browser may delete DevDocs's offline data if your computer is running low on disk space and you haven't used the app in a while.


Хотели как лучше.
--
Справедливость выше закона. А человечность выше справедливости.
Re[14]: про многословность
От: ononim  
Дата: 02.02.25 17:19
Оценка: :)
R>·>

Note: your browser may delete DevDocs's offline data if your computer is running low on disk space and you haven't used the app in a while.

R>Хотели как лучше.
как лучше это chm, технология забытой цивилизации
Как много веселых ребят, и все делают велосипед...
Re[3]: про многословность
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 02.02.25 19:55
Оценка:
Здравствуйте, T4r4sB, Вы писали:

N>>Он стремится туда же, с мелкими поправками. И это правильно.


TB>Что правильного в том, что я каждый раз заново гуглю, чтобы измерить время либо добавить в программу ГПСЧ? Потому что эту идеологически выдержанную херабору невозможно блин запомнить.

TB>В отличие от
TB>
TB>srand(time(NULL));
TB>...
TB>int i = rand() % n;
TB>...
TB>


АПИ стало гораздо шире, а не в именах дело.

Раньше был единственный способ получать рандомы (кстати, а способ/алгоритм был зафиксирован в стандарте?), а сейчас куча разных алгоритмов рандомов, и всё в стандарте описано
Маньяк Робокряк колесит по городу
Re[5]: про многословность
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 02.02.25 20:09
Оценка:
Здравствуйте, _NN_, Вы писали:

_NN>https://devdocs.io/

_NN>Можно скачать локально.
_NN>Умеет не только C++.

Клёвая тема. Только про bat-файлы ничего нет
Маньяк Робокряк колесит по городу
Re[2]: про многословность
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 02.02.25 20:10
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>Очень много символов. Всем нравится называть функцию open или close. Поэтому приходится использовать или длинные имена, или пространства имён. Но поскольку в мире C++ стоит бардак полный, используется и то и другое.


В мире C++ как раз порядок. Бардак же от совместимости с сишечкой
Маньяк Робокряк колесит по городу
Re[6]: про многословность
От: _NN_  
Дата: 03.02.25 10:53
Оценка:
Здравствуйте, rg45, Вы писали:

R>Здравствуйте, _NN_, Вы писали:


_NN>>Здравствуйте, cppguard, Вы писали:


_NN>>https://devdocs.io/

_NN>>Можно скачать локально.
_NN>>Умеет не только C++.

R>А джавы и сишарпа нету. Как же так?


C .NET всё сложно в плане лицензии и в плане возможности вытащить в удобном формате

https://github.com/dotnet/docs/issues/397

There's still a major blocker for me to add your docs to DevDocs, in that I'd need a static version to scrape/convert into DevDocs format locally (https://docs.microsoft.com/en-us/dotnet/api/ doesn't work / isn't crawlable without JavaScript + the documentation is huge, so scraping the website isn't really an option), but this is unrelated to this GH issue, so I'll close it.

http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[6]: про многословность
От: _NN_  
Дата: 03.02.25 18:06
Оценка: 34 (3)
Здравствуйте, Marty, Вы писали:

M>Здравствуйте, _NN_, Вы писали:


_NN>>https://devdocs.io/

_NN>>Можно скачать локально.
_NN>>Умеет не только C++.

M>Клёвая тема. Только про bat-файлы ничего нет


Для них отдельный сайт: https://ss64.com/nt/
Надо проверить, что там с лицензией если можно добавить на devdocs.
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[7]: про многословность
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 03.02.25 20:31
Оценка:
Здравствуйте, _NN_, Вы писали:

M>>Клёвая тема. Только про bat-файлы ничего нет


_NN>Для них отдельный сайт: https://ss64.com/nt/

_NN>Надо проверить, что там с лицензией если можно добавить на devdocs.

О, спасибо. Там вроде и про синтаксис есть
Маньяк Робокряк колесит по городу
Re[5]: про многословность
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 04.02.25 06:01
Оценка:
Здравствуйте, ononim, Вы писали:

N>>От замены std::chrono::duration::seconds на std::chr::dur::sc или даже std.chr.dur.sc легче не станет.

O>std::age::sec а duration не нужен,

"duration не нужен" — это, как говорят автомобилисты, до первого столба, когда у тебя вдруг где-то образуется 4050 год потому, что неправильно применены объекты на сложение, или 1 год вдруг преобразовался к юлианскому календарю и сократился на 10 дней потому, что вычитание.
Кроме длительности (duration) нужен ещё и период — как сделали в RFC 9581.

chrono, конечно, сложноват, но не в этом месте.

O>и хорошо что shared_ptr придумали до комитета, иначе был бы std::pointer::reference_counted::strong и std::pointer::reference_counted::weak,


Ну, такие длинные сократили бы. Например, std::smartptr::shared.

O> но к сожалению с hash_map это не прокатило, трындючие ящики таки утрындели приверженцев здравого смысла.


cppreference.com переадресовывает hash_map в unordered_map. Ты что имел в виду?
The God is real, unless declared integer.
Re: про многословность
От: · Великобритания  
Дата: 04.02.25 08:45
Оценка:
Здравствуйте, ononim, Вы писали:

o> Вот раньше все было кр.и.пнтно: std, fopen, open, malloc/realloc.

Раньше было лучше!

o> А теперь: std::unordered_map

Чем hash_map не устроил, неясно.

o> std::chrono::duration::seconds

Вообще-то оно std::chrono::seconds. Вполне ок.

o> std::strong_ordering::greater

А надо как?

o> Ватафак? Что за словоблудие?

Раньше надо было подключать какую-нибудь либу, в которой все имена были, как правило, с каким-то магическим префиксом.

А какая вообще разница? При написании есть IDE, при чтении читаешь всё равно не буквы, а слова.
avalon/3.0.0
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[6]: про многословность
От: ononim  
Дата: 04.02.25 09:12
Оценка: 1 (1)
N>"duration не нужен" — это, как говорят автомобилисты, до первого столба, когда у тебя вдруг где-то образуется 4050 год потому, что неправильно применены объекты на сложение, или 1 год вдруг преобразовался к юлианскому календарю и сократился на 10 дней потому, что вычитание.
duration как самостоятельный объект — ок (хотя название конечно опять же — period было бы читабельнее и писабельнее), а вот duration в качестве скоупа для seconds — лишнее. Создается впечатление что писатели STL забыли что они пишут не код для самих себя, а бибилиотеку для людей, которым вобщемто начхать на ее внутренности.
UPD: мне тут написали
Автор: ·
Дата: 04.02.25
что есть есть и альяс std::chrono::seconds ну чтож, вот она, борьба бобра с ослом в пределах отдельно взятого комитета. Еслиб они документировали в первую очередь понятные альясы, а многоэтажные оставляли для внутреннего пользования — мир был бы чуточку лучше.


O>>и хорошо что shared_ptr придумали до комитета, иначе был бы std::pointer::reference_counted::strong и std::pointer::reference_counted::weak,

N>Ну, такие длинные сократили бы. Например, std::smartptr::shared.
Оптимист.

O>> но к сожалению с hash_map это не прокатило, трындючие ящики таки утрындели приверженцев здравого смысла.

N>cppreference.com переадресовывает hash_map в unordered_map. Ты что имел в виду?
Я имел ввиду то, что hash_map вначале появился в бусте. И shared_ptr вначале появился в бусте, но при принятии в стандарт — наименование первого показалось черезчур коротким некоторым любителям длинный речей. А shared_ptr повезло больше.
Верните в комитет прагматиков, которые придумали названия std::map, std::set, std::iota, std::cerr и уберите любителей потрындеть. Изза них плюсы сильно отрываются от реальных проблем. Нейминг — это лишь одна и наиболее очевидная грань этой проблемы.
Как много веселых ребят, и все делают велосипед...
Отредактировано 04.02.2025 9:34 ononim . Предыдущая версия . Еще …
Отредактировано 04.02.2025 9:34 ononim . Предыдущая версия .
Re[2]: про многословность
От: ononim  
Дата: 04.02.25 09:20
Оценка:
·>А какая вообще разница? При написании есть IDE, при чтении читаешь всё равно не буквы, а слова.
std::strong_ordering Foo::operator <=>(const Foo &other) const
{
    int r = name.compare(other.name);
    if (r != 0) {
        return (r < 0) ? std::strong_ordering::less : std::strong_ordering::greater;
    }
    return std::strong_ordering::equal;
}


std::cmp Foo::operator <=>(const Foo &other) const
{
    int r = name.compare(other.name);
    if (r != 0) {
        return (r < 0) ? std::less : std::greater;
    }
    return std::equal;
}


ну вот то есть совсем нет никакой разницы в читабельности обоих вариантов?
У меня на прошлой работе как то контора купила старпатчик у которых в проекте были пятиэтажные нэймспейсы, такая себе либа-хрущевка. Вероятно те стартаперы со временем пробрались в С++ комитет.
Как много веселых ребят, и все делают велосипед...
Re[3]: про многословность
От: · Великобритания  
Дата: 04.02.25 10:15
Оценка:
Здравствуйте, ononim, Вы писали:

O>·>А какая вообще разница? При написании есть IDE, при чтении читаешь всё равно не буквы, а слова.

O>std::strong_ordering Foo::operator <=>(const Foo &other) const
O>std::cmp Foo::operator <=>(const Foo &other) const

O>ну вот то есть совсем нет никакой разницы в читабельности обоих вариантов?
Если тебе так глаза мозолит, чем using не угодил? Но я как-то не вижу принципиальной разницы. Если ещё учесть в реальности вместо Foo будет какой-нибудь InstrumentClassifier (или ты предложишь писать InstrmClsfr?), то вообще мелочи.

А как ты предлагаешь обозвать всякие weak_ordering и partial_ordering?

Кстати, вот const глаза мозолит больше, ибо разумной инфы никакой, но писать надо.

O>У меня на прошлой работе как то контора купила старпатчик у которых в проекте были пятиэтажные нэймспейсы, такая себе либа-хрущевка. Вероятно те стартаперы со временем пробрались в С++ комитет.

Ну не надо про крайности, а то пошлём тебя сапёром работать. Там в моде 3-4 буквенные идентификаторы на всё. Вот увидишь KNA1, KNVS, VTTK, KONH, T001L и сразу так порадуешься.
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[7]: про многословность
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 04.02.25 10:38
Оценка:
Здравствуйте, ononim, Вы писали:

N>>"duration не нужен" — это, как говорят автомобилисты, до первого столба, когда у тебя вдруг где-то образуется 4050 год потому, что неправильно применены объекты на сложение, или 1 год вдруг преобразовался к юлианскому календарю и сократился на 10 дней потому, что вычитание.

O>duration как самостоятельный объект — ок (хотя название конечно опять же — period было бы читабельнее и писабельнее), а вот duration в качестве скоупа для seconds — лишнее. Создается впечатление что писатели STL забыли что они пишут не код для самих себя, а бибилиотеку для людей, которым вобщемто начхать на ее внутренности.

Вопрос дискретности представления временны́х параметров вообще-то существенный. Параметризовать, например, секундами и наносекундами — совершенно разный результат по цене. Особенно это было важно при создании библиотеки, да и сейчас — на 32-битной платформе оперировать 64-битными целыми сложно, а если потребуется ещё толще — тем более.
"Скоуп" в моей записи был не прямо из chrono, там дискрет представления — параметр шаблона.

O>UPD: мне тут написали
Автор: ·
Дата: 04.02.25
что есть есть и альяс std::chrono::seconds ну чтож, вот она, борьба бобра с ослом в пределах отдельно взятого комитета. Еслиб они документировали в первую очередь понятные альясы, а многоэтажные оставляли для внутреннего пользования — мир был бы чуточку лучше.


До определённой степени так и есть.

std::chrono::seconds(C++11) duration type with Period std::ratio<1>


O>>> но к сожалению с hash_map это не прокатило, трындючие ящики таки утрындели приверженцев здравого смысла.

N>>cppreference.com переадресовывает hash_map в unordered_map. Ты что имел в виду?
O>Я имел ввиду то, что hash_map вначале появился в бусте. И shared_ptr вначале появился в бусте, но при принятии в стандарт — наименование первого показалось черезчур коротким некоторым любителям длинный речей. А shared_ptr повезло больше.
O>Верните в комитет прагматиков, которые придумали названия std::map, std::set, std::iota, std::cerr и уберите любителей потрындеть. Изза них плюсы сильно отрываются от реальных проблем. Нейминг — это лишь одна и наиболее очевидная грань этой проблемы.

К unordered_map у меня другие претензии, посерьёзнее, чем просто именование. По-нормальному это должен был быть концепт, лишённый всех специфических граблей типа перебора корзин.
Стандартизация того, что корзины 1) есть, 2) их только один набор — очень жёстко зажимает реализацию до closed addressing hash map с рывочной пересборкой. По эффективности получается амортизированное O(1), но не стабильное O(1), как было раньше в Dinkumware и вслед Microsoft STL. А это значит, что критичные к постоянству времени приложения не могут его использовать.
The God is real, unless declared integer.
Re[3]: про многословность
От: rg45 СССР  
Дата: 04.02.25 11:16
Оценка:
Здравствуйте, ononim, Вы писали:

O>·>А какая вообще разница? При написании есть IDE, при чтении читаешь всё равно не буквы, а слова.

O>
O>std::strong_ordering Foo::operator <=>(const Foo &other) const
O>{
O>    int r = name.compare(other.name);
O>    if (r != 0) {
O>        return (r < 0) ? std::strong_ordering::less : std::strong_ordering::greater;
O>    }
O>    return std::strong_ordering::equal;
O>}
O>


O>
O>std::cmp Foo::operator <=>(const Foo &other) const
O>{
O>    int r = name.compare(other.name);
O>    if (r != 0) {
O>        return (r < 0) ? std::less : std::greater;
O>    }
O>    return std::equal;
O>}
O>


O>ну вот то есть совсем нет никакой разницы в читабельности обоих вариантов?

O>У меня на прошлой работе как то контора купила старпатчик у которых в проекте были пятиэтажные нэймспейсы, такая себе либа-хрущевка. Вероятно те стартаперы со временем пробрались в С++ комитет.

Так заняты уже std::less, std::greater и std::equal. И имеют совсем другую семантику. Для компактности записи полно всяких средств: алиасы типов и пространств имен, а также using declarations (просто using std::strong_ordering). От того, что ты напишешь дополнительное объявление, твой код никак не проиграет, а только выиграет. Делая такие объявления, ты чётче очерчиваешь границы между "что" и "как".

Я уже молчу о том, что этот оператор вообще должен реализоваться в одну строчку при нормальном дизайне:

auto Foo::operator <=>(const Foo &other) const { return name <=> other.name; }
--
Справедливость выше закона. А человечность выше справедливости.
Отредактировано 04.02.2025 14:07 rg45 . Предыдущая версия .
Re[3]: про многословность
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 04.02.25 14:09
Оценка: :)
Здравствуйте, ononim, Вы писали:

O> if (r != 0) {

O> return (r < 0) ? std::strong_ordering::less : std::strong_ordering::greater;
O> }
O> return std::strong_ordering::equal;

namespace sso { using namespace std::strong_ordering; }
return (r < 0) ? sso::less : sso::greater;

Слегка калечно (вообще именно в таких деталях система импорта Python с его import foo as bar или from moo import foo as bar — самая прямая и удобная), но работает же.
The God is real, unless declared integer.
Re[4]: про многословность
От: serg_joker Украина  
Дата: 04.02.25 14:20
Оценка:
Здравствуйте, netch80, Вы писали:


N>namespace sso { using namespace std::strong_ordering; }

У такого подхода есть преимучества против namespace alias (кроме совместимости со старыми компиляторами, в которых всё равно нет никаких ордерингов)?
Re[4]: про многословность
От: rg45 СССР  
Дата: 04.02.25 14:30
Оценка:
Здравствуйте, netch80, Вы писали:

O>> if (r != 0) {

O>> return (r < 0) ? std::strong_ordering::less : std::strong_ordering::greater;
O>> }
O>> return std::strong_ordering::equal;

N>namespace sso { using namespace std::strong_ordering; }

N>return (r < 0) ? sso::less : sso::greater;

N>Слегка калечно (вообще именно в таких деталях система импорта Python с его import foo as bar или from moo import foo as bar — самая прямая и удобная), но работает же.


Во-первых, std::strong ordering — это класс, а не пространство имен. Поэтому просто: using sso = std::strong_ordering.

А если бы и было пространство имен, всё равно не стоило так извращаться. Алиасы для пространств имен тоже можно использовать: namespace fs = std::filesystem;

Ну и в-третьих, using-директивы (aka using namespace) нужно использовать очень осторожно. В идеале не использовать вообще. Ибо всё это бомбы отложенного действия.
--
Справедливость выше закона. А человечность выше справедливости.
Отредактировано 04.02.2025 14:33 rg45 . Предыдущая версия .
Re[4]: про многословность
От: Chorkov Россия  
Дата: 04.02.25 15:35
Оценка:
Здравствуйте, netch80, Вы писали:

N>Здравствуйте, ononim, Вы писали:


O>> if (r != 0) {

O>> return (r < 0) ? std::strong_ordering::less : std::strong_ordering::greater;
O>> }
O>> return std::strong_ordering::equal;

N>namespace sso { using namespace std::strong_ordering; }

N>return (r < 0) ? sso::less : sso::greater;

Еще проще:
return r<=>0;

Не понимаю, зачем эти std::strong_ordering::less хоть где-то явно использовать?
Re[5]: про многословность
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 04.02.25 19:04
Оценка:
Здравствуйте, Chorkov, Вы писали:

N>>namespace sso { using namespace std::strong_ordering; }

N>>return (r < 0) ? sso::less : sso::greater;

C>Еще проще:

C>
C>return r<=>0;
C>

C>Не понимаю, зачем эти std::strong_ordering::less хоть где-то явно использовать?

Так это был демонстрационный пример на использование слов из strong_ordering, а не на алгоритмическую часть.

Представьте себе, что вам надо написать сравнение строк, или номеров версий, которые несколько чисел через точку, или что-то ещё столь же иерархическое. Да, два символа или отдельных номера вы сравните через <=>, но тут же придётся делать условие типа return if rc != std::strong_ordering::equal, а если equal, то идти к следующему пункту.
Есть и более хитрые случаи.
The God is real, unless declared integer.
Re[5]: про многословность
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 04.02.25 19:06
Оценка:
Здравствуйте, rg45, Вы писали:

R>А если бы и было пространство имен, всё равно не стоило так извращаться. Алиасы для пространств имен тоже можно использовать: namespace fs = std::filesystem;


OK, спасибо. Уже успел забыть про них.

R>Ну и в-третьих, using-директивы (aka using namespace) нужно использовать очень осторожно. В идеале не использовать вообще. Ибо всё это бомбы отложенного действия.


В крошечном контролируемом контексте не должно быть страшно. Хотя тоже обидно, да — не могут не заложить диверсию даже в такой детали...
The God is real, unless declared integer.
Re[5]: про многословность
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 04.02.25 19:08
Оценка: +1 :)
Здравствуйте, serg_joker, Вы писали:

N>>namespace sso { using namespace std::strong_ordering; }

_>У такого подхода есть преимучества против namespace alias (кроме совместимости со старыми компиляторами, в которых всё равно нет никаких ордерингов)?

Есть преимущество: про него легче прочитать тому, кто прочно забыл детали, но помнит, что сходить на cppreference.com по слову using должно что-то подсказать
The God is real, unless declared integer.
Re: про многословность
От: RonWilson Россия  
Дата: 04.02.25 19:25
Оценка:
Здравствуйте, ononim, Вы писали:

O>Ватафак? Что за словоблудие? Я считаю комьюнити должно найти сильно разговорчивых членов комитета и расстрелять их. Ведь болтун — находка для шпиона. В данном случае — для раста.


и вернуть LPCSTR, LPCTSTR, LPTSTR
Re[6]: про многословность
От: T4r4sB Россия  
Дата: 04.02.25 20:42
Оценка: -1
Здравствуйте, netch80, Вы писали:

N>"duration не нужен" — это, как говорят автомобилисты, до первого столба, когда у тебя вдруг где-то образуется 4050 год потому, что неправильно применены объекты на сложение


Отладка таких ситуаций занимает меньше времени, чем выгугливание документации
Нет такой подлости и мерзости, на которую бы не пошёл gcc ради бессмысленных 5% скорости в никому не нужном синтетическом тесте
Re[8]: про многословность
От: T4r4sB Россия  
Дата: 04.02.25 20:47
Оценка:
Здравствуйте, netch80, Вы писали:

N>Стандартизация того, что корзины 1) есть, 2) их только один набор — очень жёстко зажимает реализацию до closed addressing hash map с рывочной пересборкой. По эффективности получается амортизированное O(1), но не стабильное O(1), как было раньше в Dinkumware и вслед Microsoft STL. А это значит, что критичные к постоянству времени приложения не могут его использовать.


А как в хеш-мапе может быть стабильное O(1)? Вот не повезло и хеши совпали — и что?
А STLьную мапу ограничивает в первую очередь требование стабильности указателей на элементы — всё, dense_map пролетает, примет аллокация на каждый элемент
Нет такой подлости и мерзости, на которую бы не пошёл gcc ради бессмысленных 5% скорости в никому не нужном синтетическом тесте
Re[6]: про многословность
От: rg45 СССР  
Дата: 04.02.25 21:02
Оценка:
Здравствуйте, netch80, Вы писали:

N>Представьте себе, что вам надо написать сравнение строк, или номеров версий, которые несколько чисел через точку, или что-то ещё столь же иерархическое. Да, два символа или отдельных номера вы сравните через <=>, но тут же придётся делать условие типа return if rc != std::strong_ordering::equal, а если equal, то идти к следующему пункту.

N>Есть и более хитрые случаи.

Разработчики дизайна three-way comparison оказались чрезвычайно коварны и расшилири операции сравнения объектов класса std::strong_ordering, разрешив сравнение с ЛИТЕРАЛЬНЫМ нулём! Таким образом, выражение rc != std::strong_ordering::equal эквивалентно rc != 0. Допустимы выражения типа a <=> b < 0, a <=> b >= 0, etc. Похоже, им и самим не очень нравилось выписывать эти длинные имена
--
Справедливость выше закона. А человечность выше справедливости.
Re[7]: про многословность
От: · Великобритания  
Дата: 04.02.25 21:49
Оценка:
Здравствуйте, ononim, Вы писали:

o> N>"duration не нужен" — это, как говорят автомобилисты, до первого столба, когда у тебя вдруг где-то образуется 4050 год потому, что неправильно применены объекты на сложение, или 1 год вдруг преобразовался к юлианскому календарю и сократился на 10 дней потому, что вычитание.

o> duration как самостоятельный объект — ок (хотя название конечно опять же — period было бы читабельнее и писабельнее), а вот duration в качестве скоупа для seconds — лишнее.
duration и period — разные сущности.
duration — это продолжительность чего-либо в тиках часов. Это как-бы физические тики часов между двумя моментами времени. И считается что в дне всегда 24 часа, в годе усреднённое кол-во дней и т.п.
period — это календарная разница по дням/месяцам/годам и может зависеть от таймзоны, календарных правил.

В плюсах именно duration.
avalon/3.0.0
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[5]: про многословность
От: cppguard  
Дата: 05.02.25 00:42
Оценка:
Здравствуйте, _NN_, Вы писали:

_NN>https://devdocs.io/


Хотел написать про devdocs, но забыл название При этом у меня там много всего накачано.
Re[9]: про многословность
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 05.02.25 09:27
Оценка:
Здравствуйте, T4r4sB, Вы писали:

N>>Стандартизация того, что корзины 1) есть, 2) их только один набор — очень жёстко зажимает реализацию до closed addressing hash map с рывочной пересборкой. По эффективности получается амортизированное O(1), но не стабильное O(1), как было раньше в Dinkumware и вслед Microsoft STL. А это значит, что критичные к постоянству времени приложения не могут его использовать.


TB>А как в хеш-мапе может быть стабильное O(1)? Вот не повезло и хеши совпали — и что?


Разумеется, всё работает в предположении, что на один хэш приходится не более K элементов, где K — константа, ограниченная задачей. Иначе хэш-мапа вообще не может быть полезной, и надо переходить к чему-то другому — например, мапе на дереве (собственно std::map в C++). Извините, абсолютных чудес не бывает. (Кстати, в Java начиная с 8-й защита против таких перекосов: если у корзины более 8 элементов, она преобразуется в маленький самопальный TreeMap. Вместо O(N) худшего случая получаем в результате O(log N).)

Я же говорил о другом. Если в процессе операции, которая имеет право делать создание новых корзин и перераспределение по ним (для unordered_map это позволено для insert с родственными, но не для erase), движок подсчитает, что надо перераспределить по другому составу корзин, это и есть O(N) для данной операции, а если нет, O(1). То есть время одного insert (emplace, etc.) может оказаться непредсказуемо высоким. Как говорил герой фильма, "стабильности нет". Сейчас в библиотеках для GCC и Clang именно так, они грубым рывком пересчитывают и перемещают всех.

А вот названные старые реализации позволяли иметь одновременно два набора корзин. Например, идёт активное заполнение, первый на 1024 корзин, второй на 2048. Каждый insert вставляет новый элемент (ключ+значение) в новый набор (который на 2048) и заодно перемещает два элемента из старого в новый. Действие по перегруппировке между корзинами, таким образом, аккуратно размазывается на разные операции. Или при удалении элементов, наоборот, новый набор тоньше, действие по сути то же самое.

В принципе, можно подобное накостылять (именно что накостылять) и в рамках требований C++11. Возвращал bucket_count() число 1024. Решили создать новый набор, оп — уже 3072, старый плюс новый. Закончился перенос из старого — старый удалили — 2048. Только сжатие назад неудобно. На erase() оно запрещено. Значит, если после всех erase() будет один insert(), на него надо навесить дополнительно сколько-то перемещений (минимум 2, лучше 3) из опустыненного широкого набора в новый узкий. Вроде я никаких подводных камней не заметил, но кто знает.

TB>А STLьную мапу ограничивает в первую очередь требование стабильности указателей на элементы — всё, dense_map пролетает, примет аллокация на каждый элемент


Ну если в большинстве корзин 0 или 1 элемент (GCC поддерживает по умолчанию load factor, равный 1) — это совмещено с самими корзинами. Можно оставлять место и на ещё один, больше — вряд ли, надо рисовать списки (или деревья, как выше).
The God is real, unless declared integer.
Re[10]: про многословность
От: T4r4sB Россия  
Дата: 05.02.25 10:13
Оценка:
Здравствуйте, netch80, Вы писали:

N>Ну если в большинстве корзин 0 или 1 элемент (GCC поддерживает по умолчанию load factor, равный 1) — это совмещено с самими корзинами.


Каждая корзина — в своей области памяти. Все равно по аллокации на элемент
Нет такой подлости и мерзости, на которую бы не пошёл gcc ради бессмысленных 5% скорости в никому не нужном синтетическом тесте
Re[11]: про многословность
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 05.02.25 13:09
Оценка:
Здравствуйте, T4r4sB, Вы писали:

TB>Здравствуйте, netch80, Вы писали:


N>>Ну если в большинстве корзин 0 или 1 элемент (GCC поддерживает по умолчанию load factor, равный 1) — это совмещено с самими корзинами.


TB>Каждая корзина — в своей области памяти. Все равно по аллокации на элемент


Почему ты так думаешь?
Смотрю на реализацию GCC. Есть массив корзин, динамически аллоцируемый целым куском. Каждый элемент корзины — структура из значения и указателя на следующий такой же элемент. Для простоты демонстрации это выглядит где-то так:

[c++]
struct bucket_element {
Value value; // по факту просто область памяти, если !present
bool present;
struct bucket_element *next;
};
struct hash_map {
struct bucket_element *bucket_array;
size_t bucket_array_size;
};
[/c++]

Массив выделяется куском.

Дополнительные аллокации bucket_element происходят только там, где в корзине более одного элемента. Первая в каждой корзине делается по месту.
The God is real, unless declared integer.
Re[12]: про многословность
От: T4r4sB Россия  
Дата: 05.02.25 13:43
Оценка:
Здравствуйте, netch80, Вы писали:

N>Здравствуйте, T4r4sB, Вы писали:


TB>>Здравствуйте, netch80, Вы писали:


N>>>Ну если в большинстве корзин 0 или 1 элемент (GCC поддерживает по умолчанию load factor, равный 1) — это совмещено с самими корзинами.


TB>>Каждая корзина — в своей области памяти. Все равно по аллокации на элемент


N>Почему ты так думаешь?


Пртому что указатели на элементы сохраняются при перестроении

N>Смотрю на реализацию GCC. Есть массив корзин, динамически аллоцируемый целым куском. Каждый элемент корзины — структура из значения и указателя на следующий такой же элемент. Для простоты демонстрации это выглядит где-то так:


N>[c++]

N>struct bucket_element {
N> Value value; // по факту просто область памяти, если !present
N> bool present;
N> struct bucket_element *next;

А еще там есть using __bucket_type=__node_base*


N>Массив выделяется куском.


Массив указателей на ноды
Нет такой подлости и мерзости, на которую бы не пошёл gcc ради бессмысленных 5% скорости в никому не нужном синтетическом тесте
Re[13]: про многословность
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 05.02.25 13:47
Оценка:
Здравствуйте, T4r4sB, Вы писали:

TB>А еще там есть using __bucket_type=__node_base*

N>>Массив выделяется куском.
TB>Массив указателей на ноды

Хм, да, согласен.

Мне это до сих пор не было существенно. Но если оптимизировать... для хэшмапы есть ещё много аспектов для оптимизации по сравнению со стандартной.
The God is real, unless declared integer.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.