Ответ 1
Нет
boost, а стандартные библиотеки С++ используются для создания чрезвычайно быстрых производственных реализаций. Конечно, можно было бы улучшить эти реализации в конкретных сценариях - это аналогично написанию собственного распределителя, когда вы знаете, как ваше выполнение отличается от общих распределителей, и как оптимизировать для этого использования. Поэтому можно, конечно, проанализировать проблему и создать оптимизированную реализацию, которая быстрее, чем реализация общего назначения (или повышение).
Конечно, любая библиотека также может быть использована неправильно, что может привести к скомпрометированному исполнению. Короче говоря, реализация boost (большая коллекция библиотек) является отличной отправной точкой для быстрой реализации. Если вам нужно, чтобы он был быстрее, чем повышался, определите проблему и улучшите ее.
Многие разработчики С++ обеспокоены производительностью; в целом, больше, чем на других языках. повышение, как правило, хорошо рассматривается, проверяется экспертами, а реализации используются для тестирования и формирования основы для стандартных функций библиотеки.
-----
Спасибо Джастину за то, что позволил мне поделиться своим ответом по закрытому вопросу: - Seth
Совсем наоборот.
Boost не касается ремней безопасности.
Boost - это высокоуровневые программные компоненты с высоким уровнем абстракции. Это позволяет избежать обычной "блокировки библиотеки", наблюдаемой с другими инфраструктурами/библиотеками 1.
Например, в вашей библиотеке Boost Graph не требуется переключение структур данных вообще: вы можете использовать/адаптировать любую структуру данных, которая хорошо подходит для вашего приложения. В худшем случае вам, возможно, придется написать класс признаков, чтобы помочь Boost с интерпретацией; Именно эта черта (обычная для современных библиотек шаблонов) делает Boost как ничто иное на практике: не будет такого несоответствия импеданса . Это напрямую соответствует новым концепциям С++ 11 в области потоковой обработки и семантики перемещения: предотвращение даже самых элементарных случаев копирования данных.
Кроме того, все эти библиотеки соблюдают ваши собственные реализации распределителей, что обеспечивает непревзойденную производительность управления памятью. Вы можете выровнять 128-битные int-векторы на С#, но вам придется перепрыгнуть через множество обручей 2 и вы не сможете заставить его работать с API-интерфейсом.
В С++ вы платите только за то, что используете, и Boost полностью в этом духе.
Мммм, я думаю, что я еще не совсем подчеркивал этот момент, но на данный момент я закончил.
Позвольте мне закрыть, посмотрев на него с другой стороны: на С# гораздо сложнее написать исполняемый код, потому что гораздо сложнее увидеть, что происходит за кулисами.
Как только вы перейдете за кулисы (небезопасный режим, код IL), вы, вероятно, будете менее безопасны, чем на С++, потому что на С++ существует прозрачная политика того, что происходит где и как. В С# вы даже не можете доверять
int*
, что у вас есть одна строка назад (потому что сборщик мусора, возможно, переместил ваш сыр); Неизвестно, что такое компилятор и или JIT-движок сделает ваш хороший общий код 3.Вкратце: вы можете писать плохой код в любом месте, но Boost нельзя обвинять. STL можно обвинить только в безумной сырой производительности 4.
<суб >
1 PoCo, Qt, MFC, WTL, что не....
3 Включая многочисленные области, которые близки к жалким и нарушают "Принцип наименьшего сюрприза" в большой степени (пример
comingзабастовкa > , когда блог вернулся в Интернете)4 То, что
std::copy
будет статически переведено в лучшую реализацию на основе SSE4, MOVSW или просто memcpy, которую могут купить деньги, и все же вам не нужно даже писать одну букву отличным от копирования aistream
на aset
, так сказать.суб >