Повысить зависимость для проекта с открытым исходным кодом на C ++?

StackOverflow https://stackoverflow.com/questions/125597

  •  02-07-2019
  •  | 
  •  

Вопрос

Повышение должно быть тот самый стандартная нестандартная библиотека C ++, которую может использовать каждый пользователь C ++.Разумно ли предполагать, что он доступен для проекта C ++ с открытым исходным кодом, или это слишком большая зависимость?

Это было полезно?

Решение

По сути, ваш вопрос сводится к “разумно ли иметь [бесплатную библиотеку xyz] в качестве зависимости для проекта с открытым исходным кодом на C ++”.

Теперь рассмотрим следующую цитату из Страуструпа, и ответ действительно не составит труда:

Без хорошей библиотеки, наиболее интересные задачи, которые трудно сделать в С++;но при наличии хорошей библиотеки практически любую задачу можно упростить

Предполагая, что это правильно (а по моему опыту, так оно и есть), затем напишу проект на C ++ разумного размера без зависимости - это совершенно неразумно.

Развивая этот аргумент дальше, автор один Зависимость от C ++ (помимо системных библиотек), которую разумно ожидать в клиентской системе (разработчика), - это библиотеки Boost.Я знать это не так, но это не является необоснованным предположением для программного обеспечения.

Если программное обеспечение даже не может полагаться на Boost, оно не может полагаться на Любой библиотека.

Другие советы

Взгляните на http://www.boost.org/doc/tools.html.В частности, bcp утилита пригодится, если вы захотите встроить свои boost-зависимости в свой проект.Выдержка с веб-сайта:

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

bcp также может сообщать о том, от каких частей Boost зависит ваш код и какие лицензии используются этими зависимостями ".

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

Раньше я крайне осторожно относился к внедрению зависимостей в системы, но теперь я нахожу, что зависимости не имеют большого значения.Современные операционные системы поставляются с менеджерами пакетов, которые часто могут автоматически устранять зависимости или, по крайней мере, очень упрощают администраторам установку того, что необходимо.Например, Boost доступен в Gentoo-Postage как dev-libs/boost, а в портах FreeBSD как devel /boost.

Современное программное обеспечение с открытым исходным кодом во многом опирается на другие системы.В недавнее исследование, отслеживая зависимости пакетов FreeBSD, мы установили, что 12 357 пакетов портов в нашей системе FreeBSD 4.11 имели в общей сложности 21 135 библиотечных зависимостей;т.е. для компиляции им требовалась библиотека, отличная от 52 библиотек, входящих в базовую систему.Библиотечные зависимости включали 688 различных библиотек, в то время как количество различных внешних библиотек, используемых одним проектом, варьировалось от 1 до 38, со значением режима 2.Кроме того, в 5117 проектах использовалась по крайней мере одна внешняя библиотека, а в 405 проектах - 10 или более.

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

Это зависит от обстоятельств.Если вы используете шаблон класса, определенный только для файла заголовка, в Boost - тогда да, продолжайте и используйте его, потому что он не использует какую-либо общую библиотеку Boost, поскольку весь код генерируется во время компиляции без каких-либо внешних зависимостей.Проблемы с управлением версиями являются проблемой для любой общей библиотеки c ++, и Boost не застрахован от этого, поэтому, если вы можете полностью избежать этой проблемы, это хорошо.

KDE также зависит от Boost.

Однако в основном это зависит от ваших целей, и в еще большей степени от вашей целевой аудитории, а не от масштаба вашего проекта.например, TinyJSON (очень маленький проект) - это почти 100% Boost, но это нормально, потому что API, который он предоставляет, похож на Boost и ориентирован на Boost-программистов, которым нужны привязки JSON.Однако многие другие библиотеки JSON не используют Boost, поскольку они ориентированы на другие аудитории.

С другой стороны, я не могу использовать Boost на работе, и я знаю, что многие другие разработчики (на своей повседневной работе) находятся в той же лодке.Так что, я думаю, вы могли бы сказать, что если ваша цель - OpenSource, и группа, которая использует Boost, дерзайте.Если вы ориентируетесь на enterprise, возможно, вам захочется обдумать это и скопировать-вставить только необходимые части из Boost (и взять на себя обязательства по их поддержке), чтобы ваш проект заработал.

  • Редактировать: Причина, по которой мы не можем использовать это на работе, заключается в том, что наше программное обеспечение должно быть переносимым примерно на 7 различных платформ и на 4 компилятора.Итак, мы не можем использовать Boost, потому что не было доказано, что он совместим со всеми нашими целями, так что причина техническая.(Нас устраивает часть лицензии с открытым исходным кодом и Boost, поскольку мы используем Boost для других целей время от времени)

Преимущества использования boost при написании кода на C++ в том, что они значительно перевешивают дополнительную сложность распространения открытого исходного кода.

Я работаю над Блокнот программиста и код зависит от boost для тестирования, интеллектуальных указателей и интеграции с python.Было несколько жалоб из-за этого требования, но большинство просто смирятся с этим, если захотят поработать над кодом.Переход на повышающую зависимость был решением, о котором я никогда не жалел.

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

Я бы сказал, да.И то , и другое Мандрива (Красная Шляпа на основе) и Ubuntu (Debian на основе) имеют пакеты для библиотек Boost.

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

К сожалению, да, для ubuntu они легкодоступны, но для RHEL 4 и 5 я почти всегда делал их из архивных файлов.Это отличные библиотеки, просто очень большие...это все равно что использовать рельсовый шип, когда иногда все, что вам действительно нужно, - это кнопка.

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top