1 .. _index: 2 3 ============================= 4 "libc++" C++ Standard Library 5 ============================= 6 7 Overview 8 ======== 9 10 libc++ is a new implementation of the C++ standard library, targeting C++11 and 11 above. 12 13 * Features and Goals 14 15 * Correctness as defined by the C++11 standard. 16 * Fast execution. 17 * Minimal memory use. 18 * Fast compile times. 19 * ABI compatibility with gcc's libstdc++ for some low-level features 20 such as exception objects, rtti and memory allocation. 21 * Extensive unit tests. 22 23 * Design and Implementation: 24 25 * Extensive unit tests 26 * Internal linker model can be dumped/read to textual format 27 * Additional linking features can be plugged in as "passes" 28 * OS specific and CPU specific code factored out 29 30 31 Getting Started with libc++ 32 --------------------------- 33 34 .. toctree:: 35 :maxdepth: 2 36 37 ReleaseNotes 38 UsingLibcxx 39 BuildingLibcxx 40 TestingLibcxx 41 Contributing 42 Cxx1yStatus 43 Cxx1zStatus 44 Cxx2aStatus 45 Cxx2bStatus 46 RangesStatus 47 FormatStatus 48 49 50 .. toctree:: 51 :hidden: 52 53 AddingNewCIJobs 54 FeatureTestMacroTable 55 56 57 Current Status 58 -------------- 59 60 After its initial introduction, many people have asked "why start a new 61 library instead of contributing to an existing library?" (like Apache's 62 libstdcxx, GNU's libstdc++, STLport, etc). There are many contributing 63 reasons, but some of the major ones are: 64 65 * From years of experience (including having implemented the standard 66 library before), we've learned many things about implementing 67 the standard containers which require ABI breakage and fundamental changes 68 to how they are implemented. For example, it is generally accepted that 69 building std::string using the "short string optimization" instead of 70 using Copy On Write (COW) is a superior approach for multicore 71 machines (particularly in C++11, which has rvalue references). Breaking 72 ABI compatibility with old versions of the library was 73 determined to be critical to achieving the performance goals of 74 libc++. 75 76 * Mainline libstdc++ has switched to GPL3, a license which the developers 77 of libc++ cannot use. libstdc++ 4.2 (the last GPL2 version) could be 78 independently extended to support C++11, but this would be a fork of the 79 codebase (which is often seen as worse for a project than starting a new 80 independent one). Another problem with libstdc++ is that it is tightly 81 integrated with G++ development, tending to be tied fairly closely to the 82 matching version of G++. 83 84 * STLport and the Apache libstdcxx library are two other popular 85 candidates, but both lack C++11 support. Our experience (and the 86 experience of libstdc++ developers) is that adding support for C++11 (in 87 particular rvalue references and move-only types) requires changes to 88 almost every class and function, essentially amounting to a rewrite. 89 Faced with a rewrite, we decided to start from scratch and evaluate every 90 design decision from first principles based on experience. 91 Further, both projects are apparently abandoned: STLport 5.2.1 was 92 released in Oct'08, and STDCXX 4.2.1 in May'08. 93 94 Platform and Compiler Support 95 ----------------------------- 96 97 For using the libc++ headers 98 ############################ 99 The libc++ headers are known to work on the following platforms, using GCC and 100 Clang. Note that functionality provided by ``<atomic>`` is only functional with 101 Clang and GCC. 102 103 ============ ==================== ============ 104 OS Arch Compilers 105 ============ ==================== ============ 106 macOS 10.9+ i386, x86_64 Clang, GCC 107 FreeBSD 10+ i386, x86_64, ARM Clang, GCC 108 Linux i386, x86_64 Clang, GCC 109 ============ ==================== ============ 110 111 The following minimum compiler versions are required: 112 113 * Clang 4.0 and above 114 * GCC 5.0 and above. 115 116 The C++03 dialect is only supported with Clang. 117 118 For building the libc++ library 119 ############################### 120 Building the libc++ library (static or shared) requires some features from 121 the operating system. As such, it has its own set of (slightly different) 122 system requirements. 123 124 ============ ==================== ============ ======================== 125 OS Arch Compilers ABI Library 126 ============ ==================== ============ ======================== 127 macOS 10.12+ i386, x86_64 Clang, GCC libc++abi 128 FreeBSD 10+ i386, x86_64, ARM Clang, GCC libcxxrt, libc++abi 129 Linux i386, x86_64 Clang, GCC libc++abi 130 ============ ==================== ============ ======================== 131 132 The following minimum compiler versions are required: 133 134 * Clang 4.0 and above 135 * GCC 5.0 and above. 136 137 138 C++ Dialect Support 139 --------------------- 140 141 * C++11 - Complete 142 * :ref:`C++14 - Complete <cxx1y-status>` 143 * :ref:`C++17 - In Progress <cxx1z-status>` 144 * :ref:`C++20 - In Progress <cxx2a-status>` 145 * :ref:`C++2b - In Progress <cxx2b-status>` 146 * `Post C++14 Technical Specifications - In Progress <http://libcxx.llvm.org/ts1z_status.html>`__ 147 * :ref:`C++ Feature Test Macro Status <feature-status>` 148 149 Notes and Known Issues 150 ---------------------- 151 152 This list contains known issues with libc++ 153 154 * Building libc++ with ``-fno-rtti`` is not supported. However 155 linking against it with ``-fno-rtti`` is supported. 156 157 158 A full list of currently open libc++ bugs can be `found here`__. 159 160 .. __: https://bugs.llvm.org/buglist.cgi?component=All%20Bugs&product=libc%2B%2B&query_format=advanced&resolution=---&order=changeddate%20DESC%2Cassigned_to%20DESC%2Cbug_status%2Cpriority%2Cbug_id&list_id=74184 161 162 Design Documents 163 ---------------- 164 165 .. toctree:: 166 :maxdepth: 1 167 168 DesignDocs/DebugMode 169 DesignDocs/CapturingConfigInfo 170 DesignDocs/ABIVersioning 171 DesignDocs/ExperimentalFeatures 172 DesignDocs/VisibilityMacros 173 DesignDocs/ThreadingSupportAPI 174 DesignDocs/FileTimeType 175 DesignDocs/FeatureTestMacros 176 DesignDocs/ExtendedCXX03Support 177 DesignDocs/UniquePtrTrivialAbi 178 DesignDocs/NoexceptPolicy 179 180 * `<atomic> design <http://libcxx.llvm.org/atomic_design.html>`_ 181 * `<type_traits> design <http://libcxx.llvm.org/type_traits_design.html>`_ 182 * `Notes by Marshall Clow`__ 183 184 .. __: https://cplusplusmusings.wordpress.com/2012/07/05/clang-and-standard-libraries-on-mac-os-x/ 185 186 Build Bots and Test Coverage 187 ---------------------------- 188 189 * `Buildkite CI pipeline <https://buildkite.com/llvm-project/libcxx-ci>`_ 190 * `LLVM Buildbot Builders <http://lab.llvm.org:8011>`_ 191 * :ref:`Adding New CI Jobs <AddingNewCIJobs>` 192 193 Getting Involved 194 ================ 195 196 First please review our `Developer's Policy <https://llvm.org/docs/DeveloperPolicy.html>`__ 197 and `Getting started with LLVM <https://llvm.org/docs/GettingStarted.html>`__. 198 199 **Bug Reports** 200 201 If you think you've found a bug in libc++, please report it using 202 the `LLVM Bugzilla`_. If you're not sure, you 203 can post a message to the `libcxx-dev mailing list`_ or on IRC. 204 205 **Patches** 206 207 If you want to contribute a patch to libc++, the best place for that is 208 `Phabricator <https://llvm.org/docs/Phabricator.html>`_. Please add `libcxx-commits` as a subscriber. 209 Also make sure you are subscribed to the `libcxx-commits mailing list <http://lists.llvm.org/mailman/listinfo/libcxx-commits>`_. 210 211 **Discussion and Questions** 212 213 Send discussions and questions to the 214 `libcxx-dev mailing list <http://lists.llvm.org/mailman/listinfo/libcxx-dev>`_. 215 216 217 218 Quick Links 219 =========== 220 * `LLVM Homepage <https://llvm.org/>`_ 221 * `libc++abi Homepage <http://libcxxabi.llvm.org/>`_ 222 * `LLVM Bugzilla <https://bugs.llvm.org/>`_ 223 * `libcxx-commits Mailing List`_ 224 * `libcxx-dev Mailing List`_ 225 * `Browse libc++ Sources <https://github.com/llvm/llvm-project/tree/main/libcxx/>`_ 226