[#] Google представил открытую библиотеку Abseil для разработчиков на C++
Новостной_робот(mira, 1) — All
2017-09-28 06:00:05


В понедельник Google выпустил исходные коды библиотеки Abseil, созданной для того, чтобы значительно дополнить стандартную библиотеку языка C++. Данный код на протяжении многих лет использовался как базовая библиотека при разработке закрытого ПО, но был вынесен в отдельный открытый проект для упрощения открытия исходных кодов и разработки других библиотек, например, protobuf, grpc и tensorflow. Код распространяется под лицензией Apache 2.0.Библиотека собирается с помощью bazel — системы сборки с открытым кодом, которая используется в Google. Данная система сборки позволяет точно контроллировать зависимости и получать воспроизводимые артефакты, но достаточно неудобна для повседневного использования. Но библиотека предполагает статическую линковку, так что её интеграция в любую систему сборки будет тривиальной.Интересные части библиотеки: [ absl::Mutex ]( https://github.com/abseil/abseil-cpp/blob/master/absl/synchronization/mutex.h )  — примитив синхронизации, который одновременно может служить мьютексом, condition variable и read-write-блокировкой. Данный класс был разработан до появления C++11, но не был заменён std::mutex и его аналогами, так как предоставляет менее ошибкопорождающий интерфейс. Бекпорты некоторых возможностей C++14/C++17 для компиляторов, поддерживающих только C++11: absl::make_unique, absl::optional, absl::any, absl::span, absl::string_view. При этом при сборке новым компилятором большинство absl:: типов будут обычным typedef для библиотечных. «Стандартный» [ набор функций работы со строками ]( https://github.com/abseil/abseil-cpp/tree/master/absl/strings ) : split, join, replace, объединение строк, перевод чисел в строки и обратно. Функции и классы для [ работы с временем и промежутками времени ]( https://github.com/abseil/abseil-cpp/tree/master/absl/time ) (по сути дублирующие аналоги из std::chrono); [ 128-битный целочисленный тип данных ]( https://github.com/abseil/abseil-cpp/blob/master/absl/numeric/int128.h ) ; [ InlinedVector ]( https://github.com/abseil/abseil-cpp/blob/master/absl/container/inlined_vector.h ) , позволяющий хранить маленькие массивы без выделения памяти; и прочее. В данный момент список не очень большой, но библиотека постоянно будет дополняться.
Ссылка: https://www.linux.org.ru/news/google/13711635