blob: baca123609ce7e7d6ca228cffd14ebef21733e29 [file] [log] [blame]
Eric Fiselierb17bb062015-08-22 19:40:49 +00001.. _index:
2
3=============================
4"libc++" C++ Standard Library
5=============================
6
7Overview
8========
9
10libc++ is a new implementation of the C++ standard library, targeting C++11.
11
12* Features and Goals
13
14 * Correctness as defined by the C++11 standard.
15 * Fast execution.
16 * Minimal memory use.
17 * Fast compile times.
18 * ABI compatibility with gcc's libstdc++ for some low-level features
19 such as exception objects, rtti and memory allocation.
20 * Extensive unit tests.
21
22* Design and Implementation:
23
24 * Extensive unit tests
25 * Internal linker model can be dumped/read to textual format
26 * Additional linking features can be plugged in as "passes"
27 * OS specific and CPU specific code factored out
28
29
30Getting Started with libc++
31---------------------------
32
33.. toctree::
34 :maxdepth: 2
35
36 UsingLibcxx
37 BuildingLibcxx
38 TestingLibcxx
39
40Current Status
41--------------
42
43After its initial introduction, many people have asked "why start a new
44library instead of contributing to an existing library?" (like Apache's
45libstdcxx, GNU's libstdc++, STLport, etc). There are many contributing
46reasons, but some of the major ones are:
47
48From years of experience (including having implemented the standard
49library before), we've learned many things about implementing
50the standard containers which require ABI breakage and fundamental changes
51to how they are implemented. For example, it is generally accepted that
52building std::string using the "short string optimization" instead of
53using Copy On Write (COW) is a superior approach for multicore
54machines (particularly in C++11, which has rvalue references). Breaking
55ABI compatibility with old versions of the library was
56determined to be critical to achieving the performance goals of
57libc++.
58
59Mainline libstdc++ has switched to GPL3, a license which the developers
60of libc++ cannot use. libstdc++ 4.2 (the last GPL2 version) could be
61independently extended to support C++11, but this would be a fork of the
62codebase (which is often seen as worse for a project than starting a new
63independent one). Another problem with libstdc++ is that it is tightly
64integrated with G++ development, tending to be tied fairly closely to the
65matching version of G++.
66
67STLport and the Apache libstdcxx library are two other popular
68candidates, but both lack C++11 support. Our experience (and the
69experience of libstdc++ developers) is that adding support for C++11 (in
70particular rvalue references and move-only types) requires changes to
71almost every class and function, essentially amounting to a rewrite.
72Faced with a rewrite, we decided to start from scratch and evaluate every
73design decision from first principles based on experience.
74
75Further, both projects are apparently abandoned: STLport 5.2.1 was
76released in Oct'08, and STDCXX 4.2.1 in May'08.
77
78Platform and Compiler Support
79-----------------------------
80
81libc++ is known to work on the following platforms, using gcc-4.2 and
82clang (lack of C++11 language support disables some functionality).
83Note that functionality provided by ``<atomic>`` is only functional with clang
84and GCC.
85
86============ ==================== ============ ========================
87OS Arch Compilers ABI Library
88============ ==================== ============ ========================
89Mac OS X i386, x86_64 Clang, GCC libc++abi
90FreeBSD 10+ i386, x86_64, ARM Clang, GCC libcxxrt, libc++abi
91Linux i386, x86_64 Clang, GCC libc++abi
92============ ==================== ============ ========================
93
94The following minimum compiler versions are strongly recommended.
95
96* Clang 3.5 and above
97* GCC 4.7 and above.
98
99Anything older *may* work.
100
101C++ Dialect Support
102---------------------
103
104* C++11 - Complete
105* `C++14 - Complete <cxx14 status_>`__
106* `C++1z - In Progress <cxx1z status_>`__
107* `Post C++14 Technical Specifications - In Progress <ts status_>`__
108
109.. _cxx14 status: http://libcxx.llvm.org/cxx1y_status.html
110.. _cxx1z status: http://libcxx.llvm.org/cxx1z_status.html
111.. _ts status: http://libcxx.llvm.org/ts1z_status.html
112
113
114Notes and Known Issues
115----------------------
116
117This list contains known issues with libc++
118
119* Building libc++ with ``-fno-rtti`` is not supported. However
120 linking against it with ``-fno-rtti`` is supported.
121* On OS X v10.8 and older the CMake option ``-DLIBCXX_LIBCPPABI_VERSION=""``
122 must be used during configuration.
123
124
125A full list of currently open libc++ bugs can be `found here <libcxx bug list_>`__.
126
127.. _libcxx bug list: https://llvm.org/bugs/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
128
129Design Documents
130----------------
131
132* `<atomic> design <http://libcxx.llvm.org/atomic_design.html>`_
133* `<type_traits> design <http://libcxx.llvm.org/type_traits_design.html>`_
134* `Status of debug mode <http://libcxx.llvm.org/debug_mode.html>`_
135* `Notes by Marshall Clow <clow notes_>`__
136
137.. _clow notes: https://cplusplusmusings.wordpress.com/2012/07/05/clang-and-standard-libraries-on-mac-os-x/
138
139Getting Involved
140================
141
142First please review our `Developer's Policy <http://llvm.org/docs/DeveloperPolicy.html>`__.
143
144**Bug Reports**
145
146If you think you've found a bug in libc++, please report it using
147the _`LLVM Bugzilla`. If you're not sure, you
148can post a message to the `cfe-dev`_. mailing list or on IRC.
149Please include "libc++" in your subject.
150
151**Patches**
152
153If you want to contribute a patch to libc++, the best place for that is
154`Phabricator <phab doc_>`__. Please include [libcxx] in the subject and
155add `cfe-commits` as a subscriber.
156
157**Discussion and Questions**
158
159Send discussions and questions to the `clang mailing list <cfe-dev_>`__.
160Please include [libcxx] in the subject.
161
162.. _phab doc: http://llvm.org/docs/Phabricator.html
163.. _cfe-dev: http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev
164
Eric Fiselierb17bb062015-08-22 19:40:49 +0000165Links
166=====
167
168* `Getting started with LLVM <http://llvm.org/docs/GettingStarted.html>`_
169* `libc++abi Homepage <libc++abi_>`__
170
171.. _`libc++abi`: http://libcxxabi.llvm.org/