xref: /aosp_15_r20/external/private-join-and-compute/third_party/abseil-cpp-20230125.2/README.md (revision a6aa18fbfbf9cb5cd47356a9d1b057768998488c)
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