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 |
| 4 | collection of C++ code (compliant to C++11) designed to augment the C++ |
| 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 | 475d64f | 2018-04-09 10:01:14 -0700 | [diff] [blame] | 49 | |
Abseil Team | 4611a60 | 2020-12-22 06:25:57 -0800 | [diff] [blame] | 50 | See the [quickstart](https://abseil.io/docs/cpp/quickstart) for more information |
| 51 | on building Abseil using the Bazel build system. |
| 52 | |
| 53 | If you require CMake support, please check the [CMake build |
| 54 | instructions](CMake/README.md) and [CMake |
| 55 | Quickstart](https://abseil.io/docs/cpp/quickstart-cmake). |
| 56 | |
| 57 | ## Support |
| 58 | |
| 59 | Abseil is officially supported on many platforms. See the [Abseil |
| 60 | platform support |
| 61 | guide](https://abseil.io/docs/cpp/platforms/platforms) for details on |
| 62 | supported operating systems, compilers, CPUs, etc. |
Abseil Team | 475d64f | 2018-04-09 10:01:14 -0700 | [diff] [blame] | 63 | |
misterg | c2e7548 | 2017-09-19 16:54:40 -0400 | [diff] [blame] | 64 | ## Codemap |
| 65 | |
| 66 | Abseil contains the following C++ library components: |
| 67 | |
Abseil Team | 2a62fbd | 2017-09-25 15:35:12 -0700 | [diff] [blame] | 68 | * [`base`](absl/base/) Abseil Fundamentals |
misterg | c2e7548 | 2017-09-19 16:54:40 -0400 | [diff] [blame] | 69 | <br /> The `base` library contains initialization code and other code which |
| 70 | all other Abseil code depends on. Code within `base` may not depend on any |
| 71 | other code (other than the C++ standard library). |
Abseil Team | 2a62fbd | 2017-09-25 15:35:12 -0700 | [diff] [blame] | 72 | * [`algorithm`](absl/algorithm/) |
misterg | c2e7548 | 2017-09-19 16:54:40 -0400 | [diff] [blame] | 73 | <br /> The `algorithm` library contains additions to the C++ `<algorithm>` |
| 74 | library and container-based versions of such algorithms. |
Abseil Team | a9a4956 | 2021-01-29 12:09:30 -0800 | [diff] [blame] | 75 | * [`cleanup`](absl/cleanup/) |
| 76 | <br /> The `cleanup` library contains the control-flow-construct-like type |
| 77 | `absl::Cleanup` which is used for executing a callback on scope exit. |
Abseil Team | 2a62fbd | 2017-09-25 15:35:12 -0700 | [diff] [blame] | 78 | * [`container`](absl/container/) |
Abseil Team | c16d555 | 2018-10-22 11:04:58 -0700 | [diff] [blame] | 79 | <br /> The `container` library contains additional STL-style containers, |
| 80 | including Abseil's unordered "Swiss table" containers. |
Abseil Team | 2a62fbd | 2017-09-25 15:35:12 -0700 | [diff] [blame] | 81 | * [`debugging`](absl/debugging/) |
misterg | c2e7548 | 2017-09-19 16:54:40 -0400 | [diff] [blame] | 82 | <br /> The `debugging` library contains code useful for enabling leak |
Abseil Team | c16d555 | 2018-10-22 11:04:58 -0700 | [diff] [blame] | 83 | checks, and stacktrace and symbolization utilities. |
| 84 | * [`hash`](absl/hash/) |
| 85 | <br /> The `hash` library contains the hashing framework and default hash |
| 86 | functor implementations for hashable types in Abseil. |
Abseil Team | 2a62fbd | 2017-09-25 15:35:12 -0700 | [diff] [blame] | 87 | * [`memory`](absl/memory/) |
misterg | c2e7548 | 2017-09-19 16:54:40 -0400 | [diff] [blame] | 88 | <br /> The `memory` library contains C++11-compatible versions of |
| 89 | `std::make_unique()` and related memory management facilities. |
Abseil Team | 2a62fbd | 2017-09-25 15:35:12 -0700 | [diff] [blame] | 90 | * [`meta`](absl/meta/) |
misterg | c2e7548 | 2017-09-19 16:54:40 -0400 | [diff] [blame] | 91 | <br /> The `meta` library contains C++11-compatible versions of type checks |
| 92 | 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] | 93 | * [`numeric`](absl/numeric/) |
misterg | c2e7548 | 2017-09-19 16:54:40 -0400 | [diff] [blame] | 94 | <br /> The `numeric` library contains C++11-compatible 128-bit integers. |
Igor Poletaev | 6df644c | 2020-12-16 11:39:01 -0800 | [diff] [blame] | 95 | * [`status`](absl/status/) |
Abseil Team | 8a9ef3c | 2020-12-21 04:44:34 -0800 | [diff] [blame] | 96 | <br /> The `status` contains abstractions for error handling, specifically |
Abseil Team | 1bae23e | 2020-12-16 11:07:40 -0800 | [diff] [blame] | 97 | `absl::Status` and `absl::StatusOr<T>`. |
Abseil Team | 2a62fbd | 2017-09-25 15:35:12 -0700 | [diff] [blame] | 98 | * [`strings`](absl/strings/) |
misterg | c2e7548 | 2017-09-19 16:54:40 -0400 | [diff] [blame] | 99 | <br /> The `strings` library contains a variety of strings routines and |
| 100 | utilities, including a C++11-compatible version of the C++17 |
| 101 | `std::string_view` type. |
Abseil Team | 2a62fbd | 2017-09-25 15:35:12 -0700 | [diff] [blame] | 102 | * [`synchronization`](absl/synchronization/) |
misterg | c2e7548 | 2017-09-19 16:54:40 -0400 | [diff] [blame] | 103 | <br /> The `synchronization` library contains concurrency primitives (Abseil's |
| 104 | `absl::Mutex` class, an alternative to `std::mutex`) and a variety of |
| 105 | synchronization abstractions. |
Abseil Team | 2a62fbd | 2017-09-25 15:35:12 -0700 | [diff] [blame] | 106 | * [`time`](absl/time/) |
misterg | c2e7548 | 2017-09-19 16:54:40 -0400 | [diff] [blame] | 107 | <br /> The `time` library contains abstractions for computing with absolute |
| 108 | points in time, durations of time, and formatting and parsing time within |
| 109 | time zones. |
Abseil Team | 2a62fbd | 2017-09-25 15:35:12 -0700 | [diff] [blame] | 110 | * [`types`](absl/types/) |
| 111 | <br /> The `types` library contains non-container utility types, like a |
Abseil Team | d732f20 | 2017-10-05 13:33:44 -0700 | [diff] [blame] | 112 | C++11-compatible version of the C++17 `std::optional` type. |
Abseil Team | c16d555 | 2018-10-22 11:04:58 -0700 | [diff] [blame] | 113 | * [`utility`](absl/utility/) |
| 114 | <br /> The `utility` library contains utility and helper code. |
misterg | c2e7548 | 2017-09-19 16:54:40 -0400 | [diff] [blame] | 115 | |
Abseil Team | 4611a60 | 2020-12-22 06:25:57 -0800 | [diff] [blame] | 116 | ## Releases |
| 117 | |
| 118 | Abseil recommends users "live-at-head" (update to the latest commit from the |
| 119 | master branch as often as possible). However, we realize this philosophy doesn't |
| 120 | work for every project, so we also provide [Long Term Support |
| 121 | Releases](https://github.com/abseil/abseil-cpp/releases) to which we backport |
| 122 | fixes for severe bugs. See our [release |
| 123 | management](https://abseil.io/about/releases) document for more details. |
| 124 | |
misterg | c2e7548 | 2017-09-19 16:54:40 -0400 | [diff] [blame] | 125 | ## License |
| 126 | |
| 127 | The Abseil C++ library is licensed under the terms of the Apache |
| 128 | license. See [LICENSE](LICENSE) for more information. |
| 129 | |
| 130 | ## Links |
| 131 | |
| 132 | For more information about Abseil: |
| 133 | |
nik7273 | 38b7043 | 2019-03-08 10:27:53 -0500 | [diff] [blame] | 134 | * Consult our [Abseil Introduction](https://abseil.io/about/intro) |
| 135 | * Read [Why Adopt Abseil](https://abseil.io/about/philosophy) to understand our |
misterg | c2e7548 | 2017-09-19 16:54:40 -0400 | [diff] [blame] | 136 | design philosophy. |
Abseil Team | 2a62fbd | 2017-09-25 15:35:12 -0700 | [diff] [blame] | 137 | * Peruse our |
nik7273 | 38b7043 | 2019-03-08 10:27:53 -0500 | [diff] [blame] | 138 | [Abseil Compatibility Guarantees](https://abseil.io/about/compatibility) to |
misterg | c2e7548 | 2017-09-19 16:54:40 -0400 | [diff] [blame] | 139 | understand both what we promise to you, and what we expect of you in return. |