Почему разработчики игр C ++ не используют библиотеку boost? [закрыто]

Итак, если вы тратите время на просмотр /ответ на вопросы по Переполнение стека под тегом C ++, вы быстро заметите, что примерно < em> all использует библиотеку boost ; некоторые даже скажут, что если вы не используете его, вы не пишете «реальный» C ++ (я не согласен, но это не главное).

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

Почему разработчики игр, в общем, не используют библиотеку boost? Это проблема производительности или памяти? Стиль? Что-то еще?

Я собирался спросить об этом при переполнении стека, но я подумал, что здесь лучше задавать вопрос.

ИЗМЕНИТЬ:

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

Позвольте мне изменить свой вопрос, чтобы спросить, если вы используете boost, почему вы решили его использовать?

c++
78 голосов | спросил James 24 FebruaryEurope/MoscowbThu, 24 Feb 2011 19:17:22 +0300000000pmThu, 24 Feb 2011 19:17:22 +030011 2011, 19:17:22

9 ответов


40

Некоторые разработчики делают, некоторые разработчики не делают (в играх и в других местах). Это зависит от потребностей и требований этих разработчиков и от того, какую технологию они должны использовать.

Стандартная библиотека C ++ часто получает одно и то же обращение, и люди часто задаются вопросом о том же, что вам интересно о it . Большинство причин аналогичны, например:

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

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

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

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

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

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

ответил Josh Petrie 24 FebruaryEurope/MoscowbThu, 24 Feb 2011 19:43:16 +0300000000pmThu, 24 Feb 2011 19:43:16 +030011 2011, 19:43:16
23

Редактировать Возвращаясь к этому вопросу через несколько лет
Продолжая использовать все больше и больше библиотек повышения, я думал, что обновляю этот вопрос, чтобы дать веский аргумент в пользу того, почему вы должны использовать boost, когда описание продукта соответствует вашим желаемым функциям. Это убедит даже nay-sayers. Загрузите openSSL, попробуйте сделать с ним клиентское и серверное приложение. Теперь попробуйте сделать эту работу на каждой платформе. Затем загрузите и используйте boost :: asio :: ssl, чтобы создать одно и то же приложение. Если вы не уверены в том, что повышение - это правильное место для поиска чистого, хорошо оптимизированного, пересмотренного, кросс-платформенного кода, это простое упражнение преобразует вас.

Версия Tl; dr:

По моему мнению, вы не видите тонну инди-или небольших или средних компаний по развитию, использующих boost, потому что это массивный и мощный дикий зверь, который нелегко приручить, и вы в основном сами по себе, когда пытаетесь чтобы узнать, как его использовать. Документация отсутствует в нескольких вариантах (см. Длинную версию), а «сообщество» вокруг проекта либо кажется пропавшим, разбросанным или неактивным (по сравнению с другими проектами).

Очень длинная ветреная версия:

Я понимаю, что уже есть принятый ответ, но, как и тот, кто действительно использует boost почти в каждом проекте, я думал, что отправлю ответ.

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

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

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

Я возился с boost вокруг версии 1.45, и только сейчас в версии 1.52 /1.53 я чувствую себя достаточно комфортно, чтобы использовать ее в производстве. Есть так много вещей, чтобы привыкнуть и помнить, даже простые вещи, такие как то, как вы настроили boost и помните эту конфигурацию, поскольку то, как библиотеки создаются, и функция может сильно различаться в зависимости от ваших предпочтений во время компиляции из-за того, как настраиваемые вещи есть.

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

Как отмечали другие, крупные компании обычно застряли в устаревшем материале или любят катиться, что я полностью понимаю. Существует также и эта глупая вещь, о которой я слышал, и столкнулся с тем, где разработчики dev и руководители проектов запрещают использовать boost, потому что он «слишком велик». Я предполагаю, что они считают, что повышение - это одна отдельная библиотека, или они никогда не слышали о BCP .

Что касается ПОЧЕМУ, я предпочитаю использовать boost

Я бы сказал, что я использую его, потому что, как вы подразумеваете в своем вопросе, это «библиотека C ++». Boost рассматривается в мире C ++ как швейцарский армейский нож, который вам в конечном итоге понадобится использовать. Таким образом, идея состоит в том, что если есть необходимость, должна быть высокопроизводительная и переносимая версия ее в boost. Большие компании способствуют повышению , высокообразованные люди с впечатляющими результатами вносят свой вклад и поддерживают его , и когда разрабатывается новый стандарт C ++, люди обычно стремятся повысить, чтобы увидеть, какие его части должен стать ISO стандартизированным C ++.

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

ответил 6 MaramWed, 06 Mar 2013 11:41:03 +04002013-03-06T11:41:03+04:0011 2013, 11:41:03
19

Мы использовали бит Boost на нашем старом рабочем месте. Основными причинами, по большей части избегающими его и ограничивающими его использование, были:

  • время компиляции - некоторые из них очень медленны для компиляции, и вы в конечном итоге неохотно получаете boost #includes в любом из своих заголовков.
  • сложность - она ​​не известна большинству разработчиков игр и поэтому делает для нечитаемого кода
  • производительность - некоторые из понятий выполняются медленно по умолчанию, например. shared_ptr
ответил Kylotan 26 FebruaryEurope/MoscowbSat, 26 Feb 2011 19:59:14 +0300000000pmSat, 26 Feb 2011 19:59:14 +030011 2011, 19:59:14
16

То же самое (было?) сказано для «более стандартного» STL. Эта статья рассказывает об EASTL, собственном переписывании (части) STL от Electronic Arts, чтобы удовлетворить потребности в разработке игр, которые весьма отличаются от потребностей разработки «более общих» приложений.

Итак, возможно, кто-то где-то переписывает (части) boost , чтобы удовлетворить их потребности в разработке игр!

ответил Mr Shunz 24 FebruaryEurope/MoscowbThu, 24 Feb 2011 19:37:32 +0300000000pmThu, 24 Feb 2011 19:37:32 +030011 2011, 19:37:32
6

Кто сказал, что они не используют boost? Я знаю один или два C ++-движка, которые использовали boost. Я никогда не работал с ними напрямую; но, в основном, потому, что мой опыт лежит в Unreal.

По причинам, с которыми я столкнулся, для того, чтобы не использовать boost, и они субъективны:

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

В основном это сводится к: общее решение не всегда «правильно подходит».

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

ответил A.A. Grapsas 24 FebruaryEurope/MoscowbThu, 24 Feb 2011 19:23:08 +0300000000pmThu, 24 Feb 2011 19:23:08 +030011 2011, 19:23:08
5

Я выхожу в StackOverflow и не использую boost. Я добавлю свою причину, потому что она еще не упомянута.

У Boost есть много замечательных идей. Мне нравится смотреть на то, что они сделали, и попробовать новые вещи и идеи. Они великолепны, потому что это среда для многих улучшений C ++.

Но толчок - очень громоздкий зверь по многим причинам. Одна из причин заключается в том, что они нуждаются (хотят) быть совместимыми практически с любым компилятором с любыми причудами. В результате им нужно использовать множество трюков, таких как MPL, чтобы снять его. Например (давным-давно), я хотел использовать их shared_ptr, чтобы запустить его, потому что мне нужны источники и библиотеки того, что было похоже на 90% повышения. Я закончил писать свои собственные; 50 читаемых строк кода. (Мои требования, где более строгие, например, без слабой_потока или безопасности потоков.)

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

Изменить :

Просто сделать ясно, поскольку он, кажется, не наступил явно (т. е. downvote). Я использую do для использования сторонних библиотек. Но в большинстве случаев, при прочих равных условиях, интеграции сторонней библиотеки или повышения, другая сторонняя библиотека быстрее и чище. Оставшееся выполняется в упражнении «2h». Я очень серьезно смотрю в сборке или покупке вопроса.

ответил rioki 6 MarpmWed, 06 Mar 2013 19:06:50 +04002013-03-06T19:06:50+04:0007 2013, 19:06:50
4

В нашем случае (а не в играх) у нас есть большая причина не использовать boost (или std): у нас есть много кода, который датируется десятилетием. По словам старших, std и boost были либо неполными, полными ошибок, либо слишком медленными для высокопроизводительных вещей, которые нам нужны. Поэтому некоторые базовые классы были реализованы с использованием тех же понятий (таких как итераторы) и часто оптимизированы для наших алгоритмов. В настоящее время все три библиотеки (наши, std и boost) очень похожи.

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

ответил Kdansky 25 FebruaryEurope/MoscowbFri, 25 Feb 2011 18:40:39 +0300000000pmFri, 25 Feb 2011 18:40:39 +030011 2011, 18:40:39
1

Я не лично использую boost или любой другой код общего назначения при создании игр, потому что игры обычно не являются общим назначением. Тип кода, который может потребоваться для реализации игры, обычно зависит от разработки игры, а не всегда, но как 98% (случайная цифра) того времени. Вы можете использовать последние несколько бит кода из boost или какой-либо другой библиотеки, но, вероятно, лучше всего просто написать ту небольшую часть, которая вам нужна здесь и там.

С другой стороны, я думаю, что довольно забавно выписывать свой собственный код в c ++, поэтому я никогда не использовал boost или что-то в этом роде.

ответил Haywire Spark 6 MarpmWed, 06 Mar 2013 15:51:11 +04002013-03-06T15:51:11+04:0003 2013, 15:51:11
0

наследие в домашних библиотеках не является фактором ... главная причина, почему никто не должен использовать boost u, другая библиотека общего назначения - это потому, что они не оптимизируют скорость и память, поэтому я должен упомянуть, что Cryengine использует STL но они скомпилируют его с версией с открытым исходным кодом под названием STLPort, поэтому не бойтесь использовать STL, просто реализуйте свои собственные распределители, и все будет хорошо. не используйте boost tho.

ответил Piporron 25 J000000Wednesday12 2012, 04:18:20

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132