
There are a few tests that are listed as failing here for which I have a patch in the works. I'll be sending those along soon. There are others where I know what is going on but don't yet have a solution, and I've included some notes for those. Several still need to be investigated, mostly in localization and the regex test suite. I think that many of these failures are due to locale implementation variations that make the expected test results not match the actual results. I'm not sure what the best way to make the tests accomodate this sort of variation might be. The failures in the unique_ptr test suite are very new and are caused by a clang crash which I've not yet looked into. git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@161079 91177308-0d34-0410-b5e6-96231b3b80d8
231 lines
9.0 KiB
HTML
231 lines
9.0 KiB
HTML
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
|
|
"http://www.w3.org/TR/html4/strict.dtd">
|
|
<!-- Material used from: HTML 4.01 specs: http://www.w3.org/TR/html401/ -->
|
|
<html>
|
|
<head>
|
|
<META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
|
|
<title>"libc++" C++ Standard Library</title>
|
|
<link type="text/css" rel="stylesheet" href="menu.css">
|
|
<link type="text/css" rel="stylesheet" href="content.css">
|
|
</head>
|
|
|
|
<body>
|
|
<div id="menu">
|
|
<div>
|
|
<a href="http://llvm.org/">LLVM Home</a>
|
|
</div>
|
|
|
|
<div class="submenu">
|
|
<label>libc++ Info</label>
|
|
<a href="/index.html">About</a>
|
|
</div>
|
|
|
|
<div class="submenu">
|
|
<label>Quick Links</label>
|
|
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev">cfe-dev</a>
|
|
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits">cfe-commits</a>
|
|
<a href="http://llvm.org/bugs/">Bug Reports</a>
|
|
<a href="http://llvm.org/svn/llvm-project/libcxx/trunk/">Browse SVN</a>
|
|
<a href="http://llvm.org/viewvc/llvm-project/libcxx/trunk/">Browse ViewVC</a>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="content">
|
|
<!--*********************************************************************-->
|
|
<h1>"libc++" C++ Standard Library</h1>
|
|
<!--*********************************************************************-->
|
|
|
|
<p>libc++ is a new implementation of the C++ standard library, targeting
|
|
C++11.</p>
|
|
|
|
<p>All of the code in libc++ is <a
|
|
href="http://llvm.org/docs/DeveloperPolicy.html#license">dual licensed</a>
|
|
under the MIT license and the UIUC License (a BSD-like license).</p>
|
|
|
|
<!--=====================================================================-->
|
|
<h2 id="goals">Features and Goals</h2>
|
|
<!--=====================================================================-->
|
|
|
|
<ul>
|
|
<li>Correctness as defined by the C++11 standard.</li>
|
|
<li>Fast execution.</li>
|
|
<li>Minimal memory use.</li>
|
|
<li>Fast compile times.</li>
|
|
<li>ABI compatibility with gcc's libstdc++ for some low-level features
|
|
such as exception objects, rtti and memory allocation.</li>
|
|
<li>Extensive unit tests.</li>
|
|
</ul>
|
|
|
|
<!--=====================================================================-->
|
|
<h2 id="why">Why a new C++ Standard Library for C++'0x?</h2>
|
|
<!--=====================================================================-->
|
|
|
|
<p>After its initial introduction, many people have asked "why start a new
|
|
library instead of contributing to an existing library?" (like Apache's
|
|
libstdcxx, GNU's libstdc++, STLport, etc). There are many contributing
|
|
reasons, but some of the major ones are:</p>
|
|
|
|
<ul>
|
|
<li><p>From years of experience (including having implemented the standard
|
|
library before), we've learned many things about implementing
|
|
the standard containers which require ABI breakage and fundamental changes
|
|
to how they are implemented. For example, it is generally accepted that
|
|
building std::string using the "short string optimization" instead of
|
|
using Copy On Write (COW) is a superior approach for multicore
|
|
machines (particularly in C++'0x, which has rvalue references). Breaking
|
|
ABI compatibility with old versions of the library was
|
|
determined to be critical to achieving the performance goals of
|
|
libc++.</p></li>
|
|
|
|
<li><p>Mainline libstdc++ has switched to GPL3, a license which the developers
|
|
of libc++ cannot use. libstdc++ 4.2 (the last GPL2 version) could be
|
|
independently extended to support C++'0x, but this would be a fork of the
|
|
codebase (which is often seen as worse for a project than starting a new
|
|
independent one). Another problem with libstdc++ is that it is tightly
|
|
integrated with G++ development, tending to be tied fairly closely to the
|
|
matching version of G++.</p>
|
|
</li>
|
|
|
|
<li><p>STLport and the Apache libstdcxx library are two other popular
|
|
candidates, but both lack C++'0x support. Our experience (and the
|
|
experience of libstdc++ developers) is that adding support for C++11 (in
|
|
particular rvalue references and move-only types) requires changes to
|
|
almost every class and function, essentially amounting to a rewrite.
|
|
Faced with a rewrite, we decided to start from scratch and evaluate every
|
|
design decision from first principles based on experience.</p>
|
|
|
|
<p>Further, both projects are apparently abandoned: STLport 5.2.1 was
|
|
released in Oct'08, and STDCXX 4.2.1 in May'08.</p>
|
|
|
|
</ul>
|
|
|
|
<!--=====================================================================-->
|
|
<h2 id="requirements">Platform Support</h2>
|
|
<!--=====================================================================-->
|
|
|
|
<p>libc++ is known to work on the following platforms, using g++-4.2 and
|
|
clang (lack of C++11 language support disables some functionality).</p>
|
|
|
|
<ul>
|
|
<li>Mac OS X i386</li>
|
|
<li>Mac OS X x86_64</li>
|
|
</ul>
|
|
|
|
<!--=====================================================================-->
|
|
<h2 id="dir-structure">Current Status</h2>
|
|
<!--=====================================================================-->
|
|
|
|
<p><a href="libcxx_by_chapter.pdf">Here</a> is a by-chapter breakdown of what
|
|
is passing tests and what isn't. This chart is currently based on testing
|
|
against clang++ with -std=c++11 on Apple's OS X. </p>
|
|
|
|
<p>
|
|
Ports to other platforms are underway. Here are recent test
|
|
results for <a href="results.Windows.html">Windows</a>
|
|
and <a href="results.Linux.html">Linux</a>.
|
|
</p>
|
|
|
|
<!--=====================================================================-->
|
|
<h2>Get it and get involved!</h2>
|
|
<!--=====================================================================-->
|
|
|
|
<p>First please review our
|
|
<a href="http://llvm.org/docs/DeveloperPolicy.html">Developer's Policy</a>.
|
|
|
|
<p>To check out the code, use:</p>
|
|
|
|
<ul>
|
|
<li><code>svn co http://llvm.org/svn/llvm-project/libcxx/trunk libcxx</code></li>
|
|
</ul>
|
|
|
|
<p>
|
|
On Mac OS 10.7 (Lion), the easiest way to get this library is to install
|
|
Xcode 4.2 or later. However if you want to install tip-of-trunk from here
|
|
(getting the bleeding edge), read on. However, be warned that Mac OS
|
|
10.7 will not boot without a valid copy of <code>libc++.1.dylib</code> in
|
|
<code>/usr/lib</code>.
|
|
</p>
|
|
|
|
<p>To build on Mac OS X 10.6 (Snow Leopard), you need a helper library and header
|
|
<a href="http://home.roadrunner.com/~hinnant/libcppabi.zip">found here</a>.
|
|
cp cxxabi.h to /usr/include, and cp libc++abi.dylib to /usr/lib. On Mac OS
|
|
X 10.7 (Lion) and later, this helper library and header are already installed
|
|
for you.
|
|
<p>
|
|
|
|
<p>
|
|
Next:
|
|
</p>
|
|
|
|
<ul>
|
|
<li><code>cd libcxx/lib</code></li>
|
|
<li><code>export TRIPLE=-apple-</code></li>
|
|
<li>Only on 10.6: <code>export MACOSX_DEPLOYMENT_TARGET=10.6</code></li>
|
|
<li><code>./buildit</code></li>
|
|
</ul>
|
|
|
|
<p>
|
|
That should result in a libc++.1.dylib. To install it I like to use links
|
|
instead of copying, but either should work:
|
|
</p>
|
|
|
|
<ul>
|
|
<li><code>cd /usr/lib</code></li>
|
|
<li><code>sudo ln -sf path-to-libcxx/lib/libc++.1.dylib libc++.1.dylib</code></li>
|
|
<li><code>sudo ln -sf libc++.1.dylib libc++.dylib</code></li>
|
|
<li><code>cd /usr/include/c++</code></li>
|
|
<li><code>sudo ln -sf path-to-libcxx/include v1</code></li>
|
|
</ul>
|
|
|
|
<p>
|
|
To use with clang you can:
|
|
</p>
|
|
|
|
<ul>
|
|
<li><code>clang++ -stdlib=libc++ test.cpp</code></li>
|
|
<li><code>clang++ -std=c++11 -stdlib=libc++ test.cpp</code></li>
|
|
</ul>
|
|
|
|
<p>To run the libc++ test suit (recommended):</p>
|
|
|
|
<ul>
|
|
<li><code>cd libcxx/test</code></li>
|
|
<li><code>./testit</code></li>
|
|
<ul>
|
|
<li>On Mac OS 10.6, to work around bugs in libc headers like
|
|
math.h and inttypes.h, add "-U__STRICT_ANSI__" and
|
|
"-D__STDC_FORMAT_MACROS" to the command line with:
|
|
<blockquote>
|
|
<pre>export OPTIONS="-std=c++11 -stdlib=libc++ -U__STRICT_ANSI__ -D__STDC_FORMAT_MACROS"</pre>
|
|
</blockquote></li>
|
|
<li>People porting libc++ to other OSes will likely have to
|
|
define similar macros.</li>
|
|
</ul>
|
|
</ul>
|
|
|
|
<!--=====================================================================-->
|
|
<h3>Notes</h3>
|
|
<!--=====================================================================-->
|
|
|
|
<p>
|
|
Building libc++ with <code>-fno-rtti</code> is not supported. However linking
|
|
against it with <code>-fno-rtti</code> is supported.
|
|
</p>
|
|
|
|
<p>Send discussions to the
|
|
(<a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev">clang mailing list</a>).</p>
|
|
|
|
<!--=====================================================================-->
|
|
<h2>Design Documents</h2>
|
|
<!--=====================================================================-->
|
|
|
|
<ul>
|
|
<li><a href="atomic_design.html"><tt><atomic></tt></a></li>
|
|
<li><a href="type_traits_design.html"><tt><type_traits></tt></a></li>
|
|
<li><a href="http://marshall.calepin.co/llvmclang-and-standard-libraries-on-mac-os-x.html">Excellent notes by Marshall Clow</a></li>
|
|
</ul>
|
|
|
|
</div>
|
|
</body>
|
|
</html>
|