1*a6aa18fbSYabin Cui# Abseil - C++ Common Libraries 2*a6aa18fbSYabin Cui 3*a6aa18fbSYabin CuiThe repository contains the Abseil C++ library code. Abseil is an open-source 4*a6aa18fbSYabin Cuicollection of C++ code (compliant to C++14) designed to augment the C++ 5*a6aa18fbSYabin Cuistandard library. 6*a6aa18fbSYabin Cui 7*a6aa18fbSYabin Cui## Table of Contents 8*a6aa18fbSYabin Cui 9*a6aa18fbSYabin Cui- [About Abseil](#about) 10*a6aa18fbSYabin Cui- [Quickstart](#quickstart) 11*a6aa18fbSYabin Cui- [Building Abseil](#build) 12*a6aa18fbSYabin Cui- [Support](#support) 13*a6aa18fbSYabin Cui- [Codemap](#codemap) 14*a6aa18fbSYabin Cui- [Releases](#releases) 15*a6aa18fbSYabin Cui- [License](#license) 16*a6aa18fbSYabin Cui- [Links](#links) 17*a6aa18fbSYabin Cui 18*a6aa18fbSYabin Cui<a name="about"></a> 19*a6aa18fbSYabin Cui## About Abseil 20*a6aa18fbSYabin Cui 21*a6aa18fbSYabin CuiAbseil is an open-source collection of C++ library code designed to augment 22*a6aa18fbSYabin Cuithe C++ standard library. The Abseil library code is collected from Google's 23*a6aa18fbSYabin Cuiown C++ code base, has been extensively tested and used in production, and 24*a6aa18fbSYabin Cuiis the same code we depend on in our daily coding lives. 25*a6aa18fbSYabin Cui 26*a6aa18fbSYabin CuiIn some cases, Abseil provides pieces missing from the C++ standard; in 27*a6aa18fbSYabin Cuiothers, Abseil provides alternatives to the standard for special needs 28*a6aa18fbSYabin Cuiwe've found through usage in the Google code base. We denote those cases 29*a6aa18fbSYabin Cuiclearly within the library code we provide you. 30*a6aa18fbSYabin Cui 31*a6aa18fbSYabin CuiAbseil is not meant to be a competitor to the standard library; we've 32*a6aa18fbSYabin Cuijust found that many of these utilities serve a purpose within our code 33*a6aa18fbSYabin Cuibase, and we now want to provide those resources to the C++ community as 34*a6aa18fbSYabin Cuia whole. 35*a6aa18fbSYabin Cui 36*a6aa18fbSYabin Cui<a name="quickstart"></a> 37*a6aa18fbSYabin Cui## Quickstart 38*a6aa18fbSYabin Cui 39*a6aa18fbSYabin CuiIf you want to just get started, make sure you at least run through the 40*a6aa18fbSYabin Cui[Abseil Quickstart](https://abseil.io/docs/cpp/quickstart). The Quickstart 41*a6aa18fbSYabin Cuicontains information about setting up your development environment, downloading 42*a6aa18fbSYabin Cuithe Abseil code, running tests, and getting a simple binary working. 43*a6aa18fbSYabin Cui 44*a6aa18fbSYabin Cui<a name="build"></a> 45*a6aa18fbSYabin Cui## Building Abseil 46*a6aa18fbSYabin Cui 47*a6aa18fbSYabin Cui[Bazel](https://bazel.build) and [CMake](https://cmake.org/) are the official 48*a6aa18fbSYabin Cuibuild systems for Abseil. 49*a6aa18fbSYabin CuiSee the [quickstart](https://abseil.io/docs/cpp/quickstart) for more information 50*a6aa18fbSYabin Cuion building Abseil using the Bazel build system. 51*a6aa18fbSYabin CuiIf you require CMake support, please check the [CMake build 52*a6aa18fbSYabin Cuiinstructions](CMake/README.md) and [CMake 53*a6aa18fbSYabin CuiQuickstart](https://abseil.io/docs/cpp/quickstart-cmake). 54*a6aa18fbSYabin Cui 55*a6aa18fbSYabin Cui<a name="support"></a> 56*a6aa18fbSYabin Cui## Support 57*a6aa18fbSYabin Cui 58*a6aa18fbSYabin CuiAbseil follows Google's [Foundational C++ Support 59*a6aa18fbSYabin CuiPolicy](https://opensource.google/documentation/policies/cplusplus-support). See 60*a6aa18fbSYabin Cui[this 61*a6aa18fbSYabin Cuitable](https://github.com/google/oss-policies-info/blob/main/foundational-cxx-support-matrix.md) 62*a6aa18fbSYabin Cuifor a list of currently supported versions compilers, platforms, and build 63*a6aa18fbSYabin Cuitools. 64*a6aa18fbSYabin Cui 65*a6aa18fbSYabin Cui<a name="codemap"></a> 66*a6aa18fbSYabin Cui## Codemap 67*a6aa18fbSYabin Cui 68*a6aa18fbSYabin CuiAbseil contains the following C++ library components: 69*a6aa18fbSYabin Cui 70*a6aa18fbSYabin Cui* [`base`](absl/base/) 71*a6aa18fbSYabin Cui <br /> The `base` library contains initialization code and other code which 72*a6aa18fbSYabin Cui all other Abseil code depends on. Code within `base` may not depend on any 73*a6aa18fbSYabin Cui other code (other than the C++ standard library). 74*a6aa18fbSYabin Cui* [`algorithm`](absl/algorithm/) 75*a6aa18fbSYabin Cui <br /> The `algorithm` library contains additions to the C++ `<algorithm>` 76*a6aa18fbSYabin Cui library and container-based versions of such algorithms. 77*a6aa18fbSYabin Cui* [`cleanup`](absl/cleanup/) 78*a6aa18fbSYabin Cui <br /> The `cleanup` library contains the control-flow-construct-like type 79*a6aa18fbSYabin Cui `absl::Cleanup` which is used for executing a callback on scope exit. 80*a6aa18fbSYabin Cui* [`container`](absl/container/) 81*a6aa18fbSYabin Cui <br /> The `container` library contains additional STL-style containers, 82*a6aa18fbSYabin Cui including Abseil's unordered "Swiss table" containers. 83*a6aa18fbSYabin Cui* [`crc`](absl/crc/) The `crc` library contains code for 84*a6aa18fbSYabin Cui computing error-detecting cyclic redundancy checks on data. 85*a6aa18fbSYabin Cui* [`debugging`](absl/debugging/) 86*a6aa18fbSYabin Cui <br /> The `debugging` library contains code useful for enabling leak 87*a6aa18fbSYabin Cui checks, and stacktrace and symbolization utilities. 88*a6aa18fbSYabin Cui* [`flags`](absl/flags/) 89*a6aa18fbSYabin Cui <br /> The `flags` library contains code for handling command line flags for 90*a6aa18fbSYabin Cui libraries and binaries built with Abseil. 91*a6aa18fbSYabin Cui* [`hash`](absl/hash/) 92*a6aa18fbSYabin Cui <br /> The `hash` library contains the hashing framework and default hash 93*a6aa18fbSYabin Cui functor implementations for hashable types in Abseil. 94*a6aa18fbSYabin Cui* [`iterator`](absl/iterator/) 95*a6aa18fbSYabin Cui <br /> The `iterator` library contains utilities for augmenting ranges in 96*a6aa18fbSYabin Cui range-based for loops. 97*a6aa18fbSYabin Cui* [`log`](absl/log/) 98*a6aa18fbSYabin Cui <br /> The `log` library contains `LOG` and `CHECK` macros and facilities 99*a6aa18fbSYabin Cui for writing logged messages out to disk, `stderr`, or user-extensible 100*a6aa18fbSYabin Cui destinations. 101*a6aa18fbSYabin Cui* [`memory`](absl/memory/) 102*a6aa18fbSYabin Cui <br /> The `memory` library contains memory management facilities that augment 103*a6aa18fbSYabin Cui C++'s `<memory>` library. 104*a6aa18fbSYabin Cui* [`meta`](absl/meta/) 105*a6aa18fbSYabin Cui <br /> The `meta` library contains compatible versions of type checks 106*a6aa18fbSYabin Cui available within C++14 and C++17 versions of the C++ `<type_traits>` library. 107*a6aa18fbSYabin Cui* [`numeric`](absl/numeric/) 108*a6aa18fbSYabin Cui <br /> The `numeric` library contains 128-bit integer types as well as 109*a6aa18fbSYabin Cui implementations of C++20's bitwise math functions. 110*a6aa18fbSYabin Cui* [`profiling`](absl/profiling/) 111*a6aa18fbSYabin Cui <br /> The `profiling` library contains utility code for profiling C++ 112*a6aa18fbSYabin Cui entities. It is currently a private dependency of other Abseil libraries. 113*a6aa18fbSYabin Cui* [`random`](absl/random/) 114*a6aa18fbSYabin Cui <br /> The `random` library contains functions for generating psuedorandom 115*a6aa18fbSYabin Cui values. 116*a6aa18fbSYabin Cui* [`status`](absl/status/) 117*a6aa18fbSYabin Cui <br /> The `status` library contains abstractions for error handling, 118*a6aa18fbSYabin Cui specifically `absl::Status` and `absl::StatusOr<T>`. 119*a6aa18fbSYabin Cui* [`strings`](absl/strings/) 120*a6aa18fbSYabin Cui <br /> The `strings` library contains a variety of strings routines and 121*a6aa18fbSYabin Cui utilities, including a C++14-compatible version of the C++17 122*a6aa18fbSYabin Cui `std::string_view` type. 123*a6aa18fbSYabin Cui* [`synchronization`](absl/synchronization/) 124*a6aa18fbSYabin Cui <br /> The `synchronization` library contains concurrency primitives (Abseil's 125*a6aa18fbSYabin Cui `absl::Mutex` class, an alternative to `std::mutex`) and a variety of 126*a6aa18fbSYabin Cui synchronization abstractions. 127*a6aa18fbSYabin Cui* [`time`](absl/time/) 128*a6aa18fbSYabin Cui <br /> The `time` library contains abstractions for computing with absolute 129*a6aa18fbSYabin Cui points in time, durations of time, and formatting and parsing time within 130*a6aa18fbSYabin Cui time zones. 131*a6aa18fbSYabin Cui* [`types`](absl/types/) 132*a6aa18fbSYabin Cui <br /> The `types` library contains non-container utility types, like a 133*a6aa18fbSYabin Cui C++14-compatible version of the C++17 `std::optional` type. 134*a6aa18fbSYabin Cui* [`utility`](absl/utility/) 135*a6aa18fbSYabin Cui <br /> The `utility` library contains utility and helper code. 136*a6aa18fbSYabin Cui 137*a6aa18fbSYabin Cui<a name="releases"></a> 138*a6aa18fbSYabin Cui## Releases 139*a6aa18fbSYabin Cui 140*a6aa18fbSYabin CuiAbseil recommends users "live-at-head" (update to the latest commit from the 141*a6aa18fbSYabin Cuimaster branch as often as possible). However, we realize this philosophy doesn't 142*a6aa18fbSYabin Cuiwork for every project, so we also provide [Long Term Support 143*a6aa18fbSYabin CuiReleases](https://github.com/abseil/abseil-cpp/releases) to which we backport 144*a6aa18fbSYabin Cuifixes for severe bugs. See our [release 145*a6aa18fbSYabin Cuimanagement](https://abseil.io/about/releases) document for more details. 146*a6aa18fbSYabin Cui 147*a6aa18fbSYabin Cui<a name="license"></a> 148*a6aa18fbSYabin Cui## License 149*a6aa18fbSYabin Cui 150*a6aa18fbSYabin CuiThe Abseil C++ library is licensed under the terms of the Apache 151*a6aa18fbSYabin Cuilicense. See [LICENSE](LICENSE) for more information. 152*a6aa18fbSYabin Cui 153*a6aa18fbSYabin Cui<a name="links"></a> 154*a6aa18fbSYabin Cui## Links 155*a6aa18fbSYabin Cui 156*a6aa18fbSYabin CuiFor more information about Abseil: 157*a6aa18fbSYabin Cui 158*a6aa18fbSYabin Cui* Consult our [Abseil Introduction](https://abseil.io/about/intro) 159*a6aa18fbSYabin Cui* Read [Why Adopt Abseil](https://abseil.io/about/philosophy) to understand our 160*a6aa18fbSYabin Cui design philosophy. 161*a6aa18fbSYabin Cui* Peruse our 162*a6aa18fbSYabin Cui [Abseil Compatibility Guarantees](https://abseil.io/about/compatibility) to 163*a6aa18fbSYabin Cui understand both what we promise to you, and what we expect of you in return. 164