LINUX.ORG.RU

Boost 1.82

 ,


2

6

Вышла новая версия Boost, набора кроссплатформенных библиотек C++. Некоторые крупные изменения:

  • более 20 библиотек запланировали отказ от поддержки C++98 в течение двух следующих релизов; минимальным требованием станет компилятор с поддержкой C++11 (например, gcc 4.8 и выше);
  • некоторые библиотеки (Math, Multiprecision) повышают требования к стандарту до C++14 (gcc 5, clang 5);
  • Mysql: новая библиотека на основе Asio, клиент MySQL;
  • Unordered: unordered_node_map, unordered_node_set - новые контейнеры на основе открытой адресации.

А также множество улучшений и исправлений в Core, Asio, Filesystem, JSON, Math, URL и других библиотеках.

>>> Подробности

★★★★

Проверено: maxcom ()
Ответ на: комментарий от eternal_sorrow

Так и скажите: я терпеть не могу C++. Правда, тогда возникнет вопрос: зачем Вы активно комментируете тему про C++?

AlexM ★★★★★
()
Ответ на: комментарий от bugfixer

«Какие ваши доказательства»?

C++ iostream vs. C stdio performance/overhead

Does the C++ standard mandate poor performance for iostreams, or am I just dealing with a poor implementation?

и дальше по списку.

Форматирование было ужасно медленным. boost::format ситуацию только ухудшал, ЕМНИП.

Но с появлением fmt жизнь стала сильно лучше. Собственно, fmt позволяет сделать всё по-человечьи, python-like форматирование, без необходимости очковать за битность передаваемых данных, и всё это с приличной производительностью.

AlexM ★★★★★
()
Последнее исправление: AlexM (всего исправлений: 1)
Ответ на: комментарий от filosofia

Внезапно, да?

Есичо, буст — это такой отстойник для кандидатов в libstdc++.

AlexM ★★★★★
()
Ответ на: комментарий от Reset

Смотря что тащить.

Библиотека — сборная солянка, писавшаяся разными людьми, в разное время, с разными целями.

Говнокода там достаточно.

Что-то зависло в статусе «прикинь, мама, мой студенческий диплом опубликовали хоть где-то!».

Что-то пилится под свою предметную область, и конкурирует с библиотеками «не из буста», примерно такими же по качеству кода.

Что-то является порождением сумрачного гения и, хотя и является жемчужиной, но такой жемчужиной, после которой странное послевкусие (да, я про Boost.Spirit).

А какие-то библиотеки — просто вызревают для стандарта.

Что, прикажете std::shared_ptr не пользоваться? Или, например, std::filesystem ? А ведь они в стандарт переехали, во всяком случае, интерфейсно, прямиком из буста.

AlexM ★★★★★
()
Ответ на: комментарий от alysnix

Ну, тут вопрос.

Если вы твёрдо знаете, что вам в каком-то месте нужен кольцевой буфер, то, конечно, да, проще взять узкоспециализированную реализацию, и всё.

А если в рамках требований к задаче мечетесь, например, между очередью и кольцевым буфером, то может захотеться иметь у двух классов общий интерфейс, подчиняющийся каким-то правилам. Типа, попробовали так, попробовали сяк, и ещё, не приведи Ктулху, на рантайм какое-то решение отнесли. Во всяком случае, изначально плюсовые контейнеры к такому варианту использования и готовили.

И тут в полный рост встаёт необходимость поддерживать те, очевидно, не самые продуманные интерфейсы, которые определены для libstdc++ контейнеров. Точнее, так: интерфейсы, может, и продуманные, но для какого-то специфичного варианта использования, а потом «мир» решил, что лучше действовать по-другому.

Поэтому и громоздкость.

AlexM ★★★★★
()
Последнее исправление: AlexM (всего исправлений: 2)
Ответ на: комментарий от eternal_sorrow

Даже когда отдельные компоненты буст добавляют в std, проекты не преходят на эту реализацию и продолжают использовать реализацию буст, потому что это ничего им не даст.

Ну почему же. Когда подвезли shared_ptr в std, мы переехали на него. Единственная заморочка была с указателями на ссылки.

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

С Qt всё гораздо хуже. Там действительно, вход копейка, выход - рупь.

sena ★★
()
Ответ на: комментарий от Forum0888

Звучит как спам и недостоверная реклама (108-ФЗ, ст.7)

AlexM ★★★★★
()
Ответ на: комментарий от Reset

Ну, тут вопрос привычек, честно.

Instant и Duration такие себе. Ну, или, во всяком случае «такие себе для тех, кто привык к другому».

AlexM ★★★★★
()
Ответ на: комментарий от bugfixer

Посмотрите. Будет здорово, если опубликуете где-то.

Я лет десять назад озадачивался вопросом, WTF is going on???

По итогу нашёл для себя fmt (в девичестве c++format), перевёл весь наш немаленький проект на него (а в логгировании для это нас это актуально, т.к. мы высираем тонны логов в level=DEBUG, logrotate не справляется :-)), и ни разу не пожалел, т.к. получил инструмент, которым даже джуниор не может развалить или существенно замедлить программу, логгируя, что же именно он достал из битового потока.

AlexM ★★★★★
()
Ответ на: комментарий от eternal_sorrow

А кого ещё должны волновать проблемы размера библиотеки на C++?

Мэнтейнеров?

Как говорится, проблемы индейцев…

Пользователей?

До них эти заголовочные файлы не доезжают, незачем они им.

AlexM ★★★★★
()
Ответ на: комментарий от Reset

А еще они любят тащить буст конкретной версии и даже содержат его в своем дереве исходников.

Это называется «reproducible build». В мире Джава, да и JS — совершенно нормальное явление. И в самом деле, иметь возможность собрать у себя ровно то, что ты сдеплоил клиенту XYZ в незапамятном году — это прямо половина золотого ключика.

AlexM ★★★★★
()
Ответ на: комментарий от f1u77y

Ну, если библиотека форматирования нормальная, то она на «%d» позволяет не замечать разницы между i16, i32, i64 и i128.

AlexM ★★★★★
()
Ответ на: комментарий от AlexM

Если она нормальная, то там в принципе нет разницы между обозначениями формата для всех типов в дефолтном представлении

f1u77y ★★★★
()
Ответ на: комментарий от AlexM

Так и скажите: я терпеть не могу C++.

C++ меня устраивает, а Boost терпеть не могу. Благо что в C++ можно выбирать функционал которым пользоваться.

X512 ★★★★★
()
Ответ на: комментарий от bugfixer

Слишком жирный, долго компилируется, на выходе огромные бинарники. Исходный код как-будто обфусцирован.

X512 ★★★★★
()
Ответ на: комментарий от X512

Слишком жирный, долго компилируется, на выходе огромные бинарники.

Подозреваю что Вы не кошек не любите, Вы их просто готовить не умеете.

Исходный код как-будто обфусцирован.

Можно поподробней?

bugfixer ★★★★★
()
Ответ на: комментарий от eternal_sorrow

man gentoo

Говорю ж, «… необычный пользователь», с суицидальными наклонностями всеми силами приближающий тепловую смерть Вселенной.

AlexM ★★★★★
()
Ответ на: комментарий от f1u77y

Ну, нет, конечно. Иногда хочется странного типа %04d или %.2f и прочих выравниваний.

А вот там, где подобное не нужно, - там действительно {}

AlexM ★★★★★
()
Последнее исправление: AlexM (всего исправлений: 1)
Ответ на: комментарий от bugfixer

Людей пугают выблевы gcc, не справившегося с инстанциацией какого-нибудь шаблона и спешащего сообщить об этом горе-разработчику.

А если он при этом - и не разработчик вовсе, а гентушник, не дождавшийся ебилда, - хорошее дело ебилдом не назовут, - то пугают вдвойне.

AlexM ★★★★★
()
Ответ на: комментарий от AlexM

Форматирование было ужасно медленным

Никогда iostream не был медленным.

Что уж говорить про обычные задачи, он используется даже в competetive programming, где есть специально подобранные задачи на вывод.

Скопирую свой ответ 2021 года.

If you need speed, you need to enable buffering. And with buffering iostream is much faster than fmt::print (~3 times faster)

constexpr std::size_t size = 1024 * 8;
char buffer[size];
std::cout.rdbuf()->pubsetbuf(buffer, size);
std::ios::sync_with_stdio(false);
fsb4000 ★★★★★
()
Ответ на: комментарий от fsb4000

Ну-у-у, ок.

Мои давнишние замеры давали другие результаты. Да и форматирование значений в стриме через запихивание флагов в тот же стрим — это какой-то треш.

Но допускаю, что на вкус все фломастеры разные.

AlexM ★★★★★
()
Последнее исправление: AlexM (всего исправлений: 1)
Ответ на: комментарий от AlexM

Вообщем то вы правы.

Обычно у меня в исходном коде строчкой выше Metastrcat()
находится комментарий, содержащий форматную строку и проблема «не читабельности» устраняется.

Суть постов, связанных с Metastrcat() была в том, что многие
программисты ведут разработку как «зомби» и не задумываются о том, что их алгоритм ресурсоемок.

Впрочем таковые времена наступили давно.

Похоже что, чем более производительными становятся cpu тем все меньше и меньше, многие
из программистов, заботятся о разработке эффективных алгоритмов.

На счет оценки harbour ваше суждение просто «ни о чем», так как о core этого проекта вы ничего не знаете.

Forum0888
()
Последнее исправление: Forum0888 (всего исправлений: 6)
Ответ на: комментарий от Forum0888

Данный тред — про релиз библиотеки (набора библиотек) Boost для C++.

Рассказ о судьбах мира, и «люди, я принёс вам сердце» лучше приберечь для другого треда.

AlexM ★★★★★
()
Ответ на: комментарий от eternal_sorrow

Но с недавних пор существует https://github.com/chriskohlhoff/asio

Хм, внутрь кода не смотрел, но минимальный ридми, не говоря уж о примерах и прочем «почему не Boost.Asio» проекту не помешал бы. документацию нашёл, изучаю.

Соображение насчёт «поддержки» в широком смысле, от документации до живого коммьюнити и автора, с этим коммьюнити работающего, пока остаётся в силе.

Я бы забрил попытку притащить в проект нечто с подобным уровнем документации. С этим же всем в команде потом тра… тренироваться, даже когда притащивший уволится, уйдёт в отпуск или просто забухает.

AlexM ★★★★★
()
Последнее исправление: AlexM (всего исправлений: 1)
Ответ на: комментарий от Reset

Насколько я понимаю, в стандарт ушла как раз fmt, так что, да, есть поддержка и {}, и %.

AlexM ★★★★★
()
Ответ на: комментарий от bugfixer

Исходный код как-будто обфусцирован

Можно поподробней?

Это он наверно про 98 или там 03 код. Мне профессор в универе тогда рассказывал, что это write-only яп.

untitl3d
()
Ответ на: комментарий от Reset

Хм, сканф типонебезопасен.

Вообще, Boost.Spirit генерит хорошие по качеству парсеры. Но сейчас я бы использовал ANTLR.

AlexM ★★★★★
()
Ответ на: комментарий от AlexM

Хм, сканф типонебезопасен.

Да

Вообще, Boost.Spirit генерит хорошие по качеству парсеры. Но сейчас я бы использовал ANTLR.

Ога, особенно это годится для наколенных поделий и одноразового кода типа кода для соревнований :)

Reset ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.