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