На новогодних праздниках нашлось время посмотреть разные C++ библиотеки. А то несправедливо — люди во всю стараются, делают всякие удобные, мощные, гибкие, быстрые и стабильные библиотеки со вкусными лицензиями, а я тут сижу велосипеды изобретаю.
Краткий список того, что нашел для себя интересного.
FuturesВ C++0x будет замечательная вещь — futures. Коротко говоря — это лениво-вычисляемые функции. Причем их можно "отправить" вычисляться на другой тред, а потом просто забрать результат. А еще можно организовать обмен сообщениями между тредами. Парочка реализаций futures
уже предлагается для включения в Boost, в том числе и версия от Anthony Williams, по которой и писался стандарт C++0x в части futures (доступна также
полностью соответствующая стандарту C++0x библиотека threads).
Boost.MPIБиблиотека для взаимодействия между процессами с крайне удобным интерфейсом. Приведенные примеры использования вдохновляют.
Any IteratorДавно подумывал написать обертку для итераторов, которая преобразует статический полиморфизм STL-ных итераторов в динамический. Например, если вы хотите иметь интерфейс с парочкой
виртуальных функций RangeBegin() и RangeEnd(), то какой тип они будут возвращать? std::vector<T>::iterator или std::list<T>::iterator? Или даже boost::transform_iterator<...>? Вам не нужно знать какой конкретно тип итераторов будет использовать та или иная реализация интерфейса. Вместо этого вы делаете тип возвращаемого значения RangeBegin() и RangeEnd() как any_iretator<T>, а внутри реализации автоматически преобразовываете свой std::deque<T>::iterator или my::whatever<T>::iterator к этому типу. Подробнее — в
статье, там же ссылка на саму библиотеку.
UUIDКроссплатформенная библиотека для работы с UUID-ами. Правда, я ожидал от нее быстрых преобразований св строку и обратно, однако там это сделано через потоки ввода-вывода, что видимо будет по производительности далеко от идеала.
unique_ptrДля тех кто уже понял чем unique_ptr лучше auto_ptr (первый заменяет собою второй в C++0x), но еще пользуется компиляторами без поддержки C++0x — готовая библиотека эмуляции unique_ptr. Да, кстати, а в Boost будет эмуляция rvalues для "старых" компиляторов.
TraversalBoost.Iterators предоставляют хорошие возможности по трансформации итераторов, однако по иерархическим структурам с помощью них бегать достаточно трудновато. Как-то я писал STL-style итераторы для MS XML и MS DOM, так вот там бы пригодилась новая библиотека Traversal — позволяет итерироваться по иерархиям.