Google представил открытую библиотеку Abseil для разработчиков на C++
Компания Google представила проект Abseil, в рамках которого открыта коллекция полезного кода для разработчиков на языке C++, расширяющего стандартную библиотеку функций. Исходные тексты распространяются под лицензией Apache 2.0.
В состав библиотеки включены функции общего назначения, используемые в продуктах Google и хорошо протестированные на реально работающих проектах. Одна часть предложенных в Abseil функций заполняет ниши, не определенные в стандарте C++, а другая предоставляет альтернативные реализации штатных функций, оптимизированные для определенных ситуаций или адаптированные для использования в проектах на C++11 из стандартных библиотек C++14 и C++17. Google не пытается продвигать Abseil как альтернативу стандартной библиотеке, а лишь желает поделиться с сообществом кодом, который оказался полезен в собственных проектах.
Компоненты библиотеки:
- base - базовая часть, включающая код для инициализации и первичные примитивы, которые используют только стандартную библиотеку C++, но при этом выступают в качестве зависимостей для других компонентов Abseil;
- algorithm - библиотека с коллекцией алгоритмов, дополняющая одноименную стандартную библиотеку C++ и включающая варианты предложенных в ней алгоритмов, оформленных с использованием контейнеров;
- container - библиотека с дополнительными контейнерами в стиле STL;
- debugging - отладочная библиотека, добавляющая проверки для выявления утечек;
- memory - включает совместимую с C++11 реализацию std::make_unique() и других функций, связанных с управлением памятью;
- meta - включает совместимые с C++11 версии механизмов проверок типов, появившихся в библиотеке type_traits в C++14 и C++17;
- numeric - предоставляет совместимые с C++11 реализации 128-разрядных целых типов;
- strings - подборка функций для обработки строк, включая совместимую с C++11 версию типа std::string_view, появившегося в стандарте C++17;
- synchronization - примитивы для организации параллельно выполняемых потоков, класс absl::Mutex (альтернатива std::mutex) и набор абстракций для синхронизации потоков;
- time - функции для операций с абсолютными моментами времени, отрезками времени, форматирования и разбора значений времени;
- types - подборка типов, например, совместимый с C++11 вариант absl::optional.