blob: 0fd35407f340116cf97690bb9c4bf5a219c9a3eb [file] [log] [blame]
Eric Fiselierb17bb062015-08-22 19:40:49 +00001.. _index:
2
3=============================
4"libc++" C++ Standard Library
5=============================
6
7Overview
8========
9
Mehdi Aminifd716532017-01-25 17:00:30 +000010libc++ is a new implementation of the C++ standard library, targeting C++11 and
11above.
Eric Fiselierb17bb062015-08-22 19:40:49 +000012
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
31Getting Started with libc++
32---------------------------
33
34.. toctree::
35 :maxdepth: 2
36
Louis Dionne38895a02018-09-06 15:05:43 +000037 ReleaseNotes
Eric Fiselierb17bb062015-08-22 19:40:49 +000038 UsingLibcxx
39 BuildingLibcxx
40 TestingLibcxx
41
Eric Fiselier11027f62015-09-05 05:29:23 +000042
Eric Fiselier32784a72019-01-16 01:37:43 +000043.. toctree::
44 :hidden:
45
46 FeatureTestMacroTable
47
Eric Fiselierb17bb062015-08-22 19:40:49 +000048Current Status
49--------------
50
51After its initial introduction, many people have asked "why start a new
52library instead of contributing to an existing library?" (like Apache's
53libstdcxx, GNU's libstdc++, STLport, etc). There are many contributing
54reasons, but some of the major ones are:
55
Eric Fiselier3034b062015-09-05 06:50:03 +000056* From years of experience (including having implemented the standard
57 library before), we've learned many things about implementing
58 the standard containers which require ABI breakage and fundamental changes
59 to how they are implemented. For example, it is generally accepted that
60 building std::string using the "short string optimization" instead of
61 using Copy On Write (COW) is a superior approach for multicore
62 machines (particularly in C++11, which has rvalue references). Breaking
63 ABI compatibility with old versions of the library was
64 determined to be critical to achieving the performance goals of
65 libc++.
Eric Fiselierb17bb062015-08-22 19:40:49 +000066
Eric Fiselier3034b062015-09-05 06:50:03 +000067* Mainline libstdc++ has switched to GPL3, a license which the developers
68 of libc++ cannot use. libstdc++ 4.2 (the last GPL2 version) could be
69 independently extended to support C++11, but this would be a fork of the
70 codebase (which is often seen as worse for a project than starting a new
71 independent one). Another problem with libstdc++ is that it is tightly
72 integrated with G++ development, tending to be tied fairly closely to the
73 matching version of G++.
Eric Fiselierb17bb062015-08-22 19:40:49 +000074
Eric Fiselier3034b062015-09-05 06:50:03 +000075* STLport and the Apache libstdcxx library are two other popular
76 candidates, but both lack C++11 support. Our experience (and the
77 experience of libstdc++ developers) is that adding support for C++11 (in
78 particular rvalue references and move-only types) requires changes to
79 almost every class and function, essentially amounting to a rewrite.
80 Faced with a rewrite, we decided to start from scratch and evaluate every
81 design decision from first principles based on experience.
82 Further, both projects are apparently abandoned: STLport 5.2.1 was
83 released in Oct'08, and STDCXX 4.2.1 in May'08.
Eric Fiselierb17bb062015-08-22 19:40:49 +000084
85Platform and Compiler Support
86-----------------------------
87
Sylvestre Ledru0296eea2018-09-20 07:57:31 +000088libc++ is known to work on the following platforms, using gcc and
89clang.
Eric Fiselierb17bb062015-08-22 19:40:49 +000090Note that functionality provided by ``<atomic>`` is only functional with clang
91and GCC.
92
93============ ==================== ============ ========================
94OS Arch Compilers ABI Library
95============ ==================== ============ ========================
96Mac OS X i386, x86_64 Clang, GCC libc++abi
97FreeBSD 10+ i386, x86_64, ARM Clang, GCC libcxxrt, libc++abi
98Linux i386, x86_64 Clang, GCC libc++abi
99============ ==================== ============ ========================
100
101The following minimum compiler versions are strongly recommended.
102
103* Clang 3.5 and above
104* GCC 4.7 and above.
105
106Anything older *may* work.
107
108C++ Dialect Support
109---------------------
110
111* C++11 - Complete
Eric Fiselier98868632015-09-06 23:09:54 +0000112* `C++14 - Complete <http://libcxx.llvm.org/cxx1y_status.html>`__
Sylvestre Ledru0296eea2018-09-20 07:57:31 +0000113* `C++17 - In Progress <http://libcxx.llvm.org/cxx1z_status.html>`__
Eric Fiselier98868632015-09-06 23:09:54 +0000114* `Post C++14 Technical Specifications - In Progress <http://libcxx.llvm.org/ts1z_status.html>`__
Eric Fiselier32784a72019-01-16 01:37:43 +0000115* :ref:`C++ Feature Test Macro Status <feature-status>`
Eric Fiselierb17bb062015-08-22 19:40:49 +0000116
117Notes and Known Issues
118----------------------
119
120This list contains known issues with libc++
121
122* Building libc++ with ``-fno-rtti`` is not supported. However
123 linking against it with ``-fno-rtti`` is supported.
Eric Fiselierb17bb062015-08-22 19:40:49 +0000124
125
Eric Fiselier67ffd0e2015-09-06 23:22:02 +0000126A full list of currently open libc++ bugs can be `found here`__.
Eric Fiselierb17bb062015-08-22 19:40:49 +0000127
Eric Fiselier3c354912017-02-17 08:37:03 +0000128.. __: 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
Eric Fiselierb17bb062015-08-22 19:40:49 +0000129
130Design Documents
131----------------
132
Eric Fiselierf9f796e2015-10-13 22:12:02 +0000133.. toctree::
134 :maxdepth: 1
135
Mehdi Aminie9c66ad2017-05-04 17:08:54 +0000136 DesignDocs/AvailabilityMarkup
Eric Fiselier687d3212016-12-28 04:58:52 +0000137 DesignDocs/DebugMode
Eric Fiselierf9f796e2015-10-13 22:12:02 +0000138 DesignDocs/CapturingConfigInfo
Eric Fiselier29ada6d2015-10-14 00:22:05 +0000139 DesignDocs/ABIVersioning
Eric Fiselier49e29672016-09-15 22:27:07 +0000140 DesignDocs/VisibilityMacros
Eric Fiselier00f6bea2017-01-06 20:05:40 +0000141 DesignDocs/ThreadingSupportAPI
Eric Fiselierd9819772018-07-25 02:53:53 +0000142 DesignDocs/FileTimeType
Eric Fiselier32784a72019-01-16 01:37:43 +0000143 DesignDocs/FeatureTestMacros
Eric Fiselierf9f796e2015-10-13 22:12:02 +0000144
Eric Fiselierb17bb062015-08-22 19:40:49 +0000145* `<atomic> design <http://libcxx.llvm.org/atomic_design.html>`_
146* `<type_traits> design <http://libcxx.llvm.org/type_traits_design.html>`_
Eric Fiselier98868632015-09-06 23:09:54 +0000147* `Notes by Marshall Clow`__
Eric Fiselierb17bb062015-08-22 19:40:49 +0000148
Eric Fiselier98868632015-09-06 23:09:54 +0000149.. __: https://cplusplusmusings.wordpress.com/2012/07/05/clang-and-standard-libraries-on-mac-os-x/
Eric Fiselierb17bb062015-08-22 19:40:49 +0000150
Eric Fiselierf0d80222015-10-15 03:27:02 +0000151Build Bots and Test Coverage
152----------------------------
Eric Fiselier3034b062015-09-05 06:50:03 +0000153
154* `LLVM Buildbot Builders <http://lab.llvm.org:8011/console>`_
155* `Apple Jenkins Builders <http://lab.llvm.org:8080/green/view/Libcxx/>`_
Eric Fiselier60ef0e82017-05-04 07:40:23 +0000156* `Windows Appveyor Builders <https://ci.appveyor.com/project/llvm-mirror/libcxx>`_
Eric Fiselierf0d80222015-10-15 03:27:02 +0000157* `Code Coverage Results <http://efcs.ca/libcxx-coverage>`_
Eric Fiselier3034b062015-09-05 06:50:03 +0000158
Eric Fiselierb17bb062015-08-22 19:40:49 +0000159Getting Involved
160================
161
Eric Fiselier3034b062015-09-05 06:50:03 +0000162First please review our `Developer's Policy <http://llvm.org/docs/DeveloperPolicy.html>`__
163and `Getting started with LLVM <http://llvm.org/docs/GettingStarted.html>`__.
Eric Fiselierb17bb062015-08-22 19:40:49 +0000164
165**Bug Reports**
166
167If you think you've found a bug in libc++, please report it using
Eric Fiselier3034b062015-09-05 06:50:03 +0000168the `LLVM Bugzilla`_. If you're not sure, you
Eric Fiselier0ef540b2018-09-22 19:49:29 +0000169can post a message to the `libcxx-dev mailing list`_ or on IRC.
Eric Fiselierb17bb062015-08-22 19:40:49 +0000170
171**Patches**
172
173If you want to contribute a patch to libc++, the best place for that is
Eric Fiselier0ef540b2018-09-22 19:49:29 +0000174`Phabricator <http://llvm.org/docs/Phabricator.html>`_. Please add `libcxx-commits` as a subscriber.
175Also make sure you are subscribed to the `libcxx-commits mailing list <http://lists.llvm.org/mailman/listinfo/libcxx-commits>`_.
Eric Fiselierb17bb062015-08-22 19:40:49 +0000176
177**Discussion and Questions**
178
Eric Fiselier98868632015-09-06 23:09:54 +0000179Send discussions and questions to the
Eric Fiselier0ef540b2018-09-22 19:49:29 +0000180`libcxx-dev mailing list <http://lists.llvm.org/mailman/listinfo/libcxx-dev>`_.
Eric Fiselierb17bb062015-08-22 19:40:49 +0000181
Eric Fiselierb17bb062015-08-22 19:40:49 +0000182
Eric Fiselierb17bb062015-08-22 19:40:49 +0000183
Eric Fiselier3034b062015-09-05 06:50:03 +0000184Quick Links
185===========
Eric Fiselier98868632015-09-06 23:09:54 +0000186* `LLVM Homepage <http://llvm.org/>`_
187* `libc++abi Homepage <http://libcxxabi.llvm.org/>`_
Eric Fiselier3c354912017-02-17 08:37:03 +0000188* `LLVM Bugzilla <https://bugs.llvm.org/>`_
Eric Fiselier0ef540b2018-09-22 19:49:29 +0000189* `libcxx-commits Mailing List`_
190* `libcxx-dev Mailing List`_
James Y Knight5d71fc52019-01-29 16:37:27 +0000191* `Browse libc++ Sources <https://github.com/llvm/llvm-project/tree/master/libcxx/>`_