Подтвердить что ты не робот

Каковы наилучшие компоненты Boost?

Я просматривал версию 1.38.0 библиотек Boost, пытаясь решить, достаточно ли там драгоценностей, чтобы оправдать переговоры о процессе утверждения внешнего программного обеспечения моей компании. В ходе написания тестовых программ и чтения документов я сделал несколько выводов

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

На самом деле, некоторые библиотеки кажутся мне немного игрушечными.

Существует несколько довольно доступных библиотек, которые я могу увидеть, чтобы использовать их после короткого периода исследования, например boost:: variant (мне очень нравится компонент посетителя и тот факт, что компилятор работает, если посетителю не хватает оператор для одного из вариантов вариантов). Я бы использовал boost:: shared_ptr, за исключением того факта, что наша группа уже имеет набор типов интеллектуальных указателей.

Итак, основываясь на широком опыте пользователей Stack Overflow, которые расширяют библиотеки

  • имеют высокое качество?
  • больше, чем игрушки?
  • Есть ли какие-либо, у которых есть высокий входной барьер, но который стоит изучать?

Обратите внимание, что это несколько иной вопрос, чем заданный в Boost считается вредным?

P.S. - Удален ли один из ответов (из лёгкой)? Я не вижу его здесь, и только отрывок на моей странице пользователя...

4b9b3361

Ответ 1

Я использую довольно часто (и это упрощает мою жизнь):

  • интеллектуальные указатели (shared_ptr, scoped_ptr, weak_ptr, interprocess unique_ptr):

    • scoped_ptr для базового RAII (без совместного владения и передачи прав собственности) без каких-либо затрат.
    • shared_ptr для более сложных операций - когда требуется совместное владение. Однако есть некоторая стоимость.
    • unique_ptr - активизируется работа по объединению различных подходов (присутствует в Boost) до unique_ptr с эмуляцией перемещения.
    • Они действительно просты в использовании (только для заголовков), легко освоены и очень хорошо протестированы (ну, кроме, возможно, unique_ptr)
  • Boost Thread - активно развивается (потоки теперь перемещаются) для работы с потоками. Скрывает сложность реализации потоков на данной платформе.

  • Boost MPL и Fusion - это труднее объяснить. В течение долгого времени я не использовал время компиляции, но после некоторого чтения и обучения выяснилось, что некоторые из моих кодов могут быть легко упрощены. Тем не менее, остерегайтесь времени компиляции...

  • Boost Asio

    • В отличие от первого впечатления (по крайней мере, некоторое время назад) это не только сетевая библиотека. Он обеспечивает асинхронную модель ввода/вывода, которая может использоваться практически для всех.
  • Boost Format (мощное форматирование вывода, но очень тяжелое)

  • Boost Spirit2x (Karma и Qi используются как для синтаксического анализа, так и для генерации выходных данных на основе данной грамматики). Действительно мощный, может создавать парсер, не прибегая к внешним инструментам. Однако время компиляции может быть проблемой. Также активно развивается версия 2x, и документация довольно скудна (список рассылки Spirit-devel очень полезен, хотя)

  • Повысьте привязку, функцию и лямбда, чтобы облегчить вашу жизнь и увеличить Phoenix - просто экспериментировать

  • lexical_cast (что-то похожее может скоро родиться как boost:: string)

  • Regex/Xpressive - регулярные выражения

  • Типовые черты и концептуальные проверки - еще раз сделать вашу жизнь проще

  • Математика:

    • генераторы случайных чисел
    • различные статистические распределения
    • ublas - для использования привязок LAPACK/BLAS в С++ подобно
    • некоторые математические функции, обычно недоступные в С++
    • некоторые инструменты для управления преобразованиями между числовыми типами
    • интервальная арифметика
  • Boost Iterator (специализированные адаптеры для итераторов и фасадов для создания собственных)

  • Рамочная платформа для тестирования блоков

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

Не забудьте использовать правильные инструменты (молотки) для правильных проблем (гвоздей). Не забудьте сохранить простые решения. Помните о стоимости полученной функциональности (например, shared_ptr или boost::format служебные данные времени выполнения или MPL/Fusion/Spirit/Phoenix), а также время выполнения компиляции и исполняемые размеры). Но экспериментируйте и учитесь - там, где весело.

И когда дело доходит до убеждения руководства в использовании новых библиотек, вам не нужно начинать со всех библиотек. Начните с простых вещей (возможно, те, которые имеют длинную и стабильную историю Boost, широкую поддержку компилятора, планируется включить в TR2/С++ 1x и т.д.) И простые примеры, которые показывают преимущества.

Ответ 2

Я обнаружил, что boost является неоспоримым обязательным при разработке кросс-платформенных (например, * nix и win32) многопоточных приложений (boost::thread, boost::interprocess.) Только это было оправдано, по крайней мере, в одном случае для принятия boost в рамках проектов моих работодателей.

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

Ответ 3

Я часто использую boost:: filesystem. Он делает все необходимое для простого управления файлами

Ответ 4

Я бы сказал, что ценные библиотеки:

  • Метапрограммирование (MPL, enable_if, type/function_traits)
  • Препроцессор - если вам это нужно, это может пригодиться
  • вариант, необязательный - как вы уже отметили
  • Математика - кватернионы, дополнительные математические функции (хотя они могут быть вам не полезны)
  • lambda: хотя синтаксис волосатый, он довольно захватывающий
  • Операторы/итераторы: они действительно удобны при построении собственных типов.

Возможно, Python (никогда не пытался, но некоторые, например, программы KDE используют его)

Ответ 6

Boost:: lambda несколько полезна, если вы используете STL. Это позволяет создавать предикаты на месте, например:

for_each(a.begin(), a.end(), std::cout << _1 << ' ');

Этот код выводит все элементы из контейнера, разделенные пробелами.

Ответ 7

Многие из добавлений к стандартной библиотеке С++ 0x были сначала созданы как часть библиотек Boost.

Они не идеальны (это какое-либо программное обеспечение), но используемый технический процесс довольно устойчив (гораздо больше, чем большинство бесплатных программ). Если вам нужна помощь, вы найдете много в списке рассылки.

Ответ 8

Я лично думаю, что вы должны взглянуть на библиотеки, которые скрывают специфические для платформы вещи, такие как потоки, ipc, файлы с отображением памяти, файловая система, асинхронный IO и т.д.

Это может сэкономить много времени и проблем в многоплатформенных проектах и, как правило, сосредоточено на раскрытии функциональности, а не на упражнениях в фантастических функциях С++.

Ответ 9

Если вам нужно разобрать текстовые файлы, которые являются более сложными, это простые пары ключ/значение, я настоятельно рекомендую Boost:: spirit. Он имеет высокую кривую обучения, но как только вы это выясните, он позволяет легко вставлять грамматики EBNF прямо в код. Он гораздо более надежный, чем собственный парсер. Я также обнаружил, что создаю форматы файлов, которые больше предназначены для удобства писателя файла, чем писатель кода синтаксического анализа.

Ответ 10

Я нашел boost.thread и boost.asio незаменимым для написания приложений клиент/сервер. Библиотека интеллектуальных указателей позволяет легко писать код, который использует обработку исключений без утечки памяти.

С другой стороны, недавно был выпущен набор файлов PDF, документирующих некоторые из наиболее распространенных библиотек ускорения. Вы можете скачать их из SourceForge.

Ответ 11

Я прочитал другие ответы, и мне нужно добавить Boost.Graph(BGL) и его друга Boost.Property_map. Эти два буквально изменили мою повседневную работу.

Это очень хорошо спроектировано, но большинство людей откладывают сначала, потому что есть очень высокая цена, чтобы заплатить, прежде чем фактически понять цель всех концепций. Но как только вы овладеете этой библиотекой, становится без труда!