tgoop.com/cxx95/98
Last Update:
#opensource
Обзор на Boost
Boost это широко известный набор библиотек для C++. Boost оказал большое влияние на развитие C++, но что осталось от его влияния в 2023 году?
Чтобы не копаться в библиотеках самому, можно почитать про разработку в Boost в крутой книге крутого Антона Полухина, которой уже прилично лет, но ее держат в актуальном состоянии.
Надеюсь, не проспойлерю книгу (на сайте все равно есть исходники примеров), но очень, очень много чего в Boost вошло в стандарты C++, и вы половину книги будете читать про то, как работают классы boost::shared_ptr<T>
и boost::string_view
. Работают они почти так же, как канонические std::XXX
, но иногда отличия бывают (в книге рассказано, какие именно).
Эта часть Boost отдала свои жизненные соки Стандарту C++ и перестала быть интересной (кроме как тем, кто пишет на C++ старого стандарта и не может перейти на более новый стандарт).
Далеко не все куски Boost находятся в ажурном состоянии. Сейчас в Boost состоит 169 библиотек, во многом независимых друг от друга. Практически у всех библиотек есть какие-то реальные проблемы из этих:Boost.Variant
и Boost.Variant2
.
В целом Boost так себе в нишевых библиотеках, количество контрибьюторов в отдельную библиотеку намного ниже, чем в популярный проект.
Иногда кто-то хочет усугубить проблему и добавить библиотеку по типу Boost.Lua
(еще одну к овер9000 библиотекам про Lua), но к счастью количество библиотек растет не так быстро.
Видимо, делаются попытки с уверенностью, что Boost сам по себе типа как бы бренд, и библиотека становится лучше как бы самим фактом наличия в Boost... Что не так.
Например, Boost.Hana для метапрограммирования
struct Person {Boost.Spirit как LL-парсер, который притом header-only (поэтому собирается по 10 минут).
BOOST_HANA_DEFINE_STRUCT(Person,
(std::string, name),
(int, age)
);
};
Есть библиотеки для имитации
std::move
до C++11 и прочие попытки перепрыгнуть выше крыши.Из тех библиотек, что я активно исследовал:
Boost.ScopeExit - в другом опенсорсном проекте есть реализация подобной штуки без необходимости писать
BOOST_SCOPE_EXIT_END
в конце.Boost.SmallVector - официально стырен из LLVM, а не придуман уникально.
Я туда сделал коммиты (github) и ускорил некоторые методы в 2 раза, если система поддерживает интринсики как
__builtin_popcount
.Offtop: