Home | History | Annotate | Download | only in www
      1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
      2           "http://www.w3.org/TR/html4/strict.dtd">
      3 <!-- Material used from: HTML 4.01 specs: http://www.w3.org/TR/html401/ -->
      4 <html>
      5 <head>
      6   <META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
      7   <title>"libc++" C++ Standard Library</title>
      8   <link type="text/css" rel="stylesheet" href="menu.css">
      9   <link type="text/css" rel="stylesheet" href="content.css">
     10 </head>
     11 
     12 <body>
     13 <div id="menu">
     14   <div>
     15     <a href="https://llvm.org/">LLVM Home</a>
     16   </div>
     17 
     18   <div class="submenu">
     19     <label>libc++ Info</label>
     20     <a href="/index.html">About</a>
     21   </div>
     22 
     23   <div class="submenu">
     24     <label>Quick Links</label>
     25     <a href="https://libcxxabi.llvm.org/">libc++abi</a>
     26     <a href="https://lists.llvm.org/mailman/listinfo/libcxx-dev">libcxx-dev</a>
     27     <a href="https://lists.llvm.org/mailman/listinfo/libcxx-commits">libcxx-commits</a>
     28     <a href="https://bugs.llvm.org/">Bug Reports</a>
     29     <a href="https://llvm.org/svn/llvm-project/libcxx/trunk/">Browse SVN</a>
     30     <a href="https://llvm.org/viewvc/llvm-project/libcxx/trunk/">Browse ViewVC</a>
     31   </div>
     32 </div>
     33 
     34 <div id="content">
     35   <!--*********************************************************************-->
     36   <h1>"libc++" C++ Standard Library</h1>
     37   <!--*********************************************************************-->
     38 
     39   <p>libc++ is an implementation of the C++ standard library, targeting
     40      C++11, C++14 and above.</p>
     41 
     42   <p>All of the code in libc++ is <a
     43      href="https://llvm.org/docs/DeveloperPolicy.html#license">dual licensed</a>
     44      under the MIT license and the UIUC License (a BSD-like license).</p>
     45 
     46   <!--=====================================================================-->
     47   <h2>New Documentation Coming Soon!</h2>
     48   <!--=====================================================================-->
     49 
     50   <p> Looking for documentation on how to use, build and test libc++? If so
     51       checkout the new libc++ documentation.</p>
     52 
     53   <p><a href="https://libcxx.llvm.org/docs/">
     54       Click here for the new libc++ documentation.</a></p>
     55 
     56   <!--=====================================================================-->
     57   <h2 id="goals">Features and Goals</h2>
     58   <!--=====================================================================-->
     59 
     60     <ul>
     61         <li>Correctness as defined by the C++11 standard.</li>
     62         <li>Fast execution.</li>
     63         <li>Minimal memory use.</li>
     64         <li>Fast compile times.</li>
     65         <li>ABI compatibility with gcc's libstdc++ for some low-level features
     66             such as exception objects, rtti and memory allocation.</li>
     67         <li>Extensive unit tests.</li>
     68     </ul>
     69 
     70   <!--=====================================================================-->
     71   <h2 id="why">Why a new C++ Standard Library for C++11?</h2>
     72   <!--=====================================================================-->
     73 
     74   <p>After its initial introduction, many people have asked "why start a new
     75      library instead of contributing to an existing library?" (like Apache's
     76      libstdcxx, GNU's libstdc++, STLport, etc).  There are many contributing
     77      reasons, but some of the major ones are:</p>
     78 
     79   <ul>
     80   <li><p>From years of experience (including having implemented the standard
     81       library before), we've learned many things about implementing
     82       the standard containers which require ABI breakage and fundamental changes
     83       to how they are implemented.  For example, it is generally accepted that
     84       building std::string using the "short string optimization" instead of
     85       using Copy On Write (COW) is a superior approach for multicore
     86       machines (particularly in C++11, which has rvalue references).  Breaking
     87       ABI compatibility with old versions of the library was
     88       determined to be critical to achieving the performance goals of
     89       libc++.</p></li>
     90 
     91   <li><p>Mainline libstdc++ has switched to GPL3, a license which the developers
     92       of libc++ cannot use.  libstdc++ 4.2 (the last GPL2 version) could be
     93       independently extended to support C++11, but this would be a fork of the
     94       codebase (which is often seen as worse for a project than starting a new
     95       independent one).  Another problem with libstdc++ is that it is tightly
     96        integrated with G++ development, tending to be tied fairly closely to the
     97        matching version of G++.</p>
     98     </li>
     99 
    100   <li><p>STLport and the Apache libstdcxx library are two other popular
    101       candidates, but both lack C++11 support.  Our experience (and the
    102       experience of libstdc++ developers) is that adding support for C++11 (in
    103       particular rvalue references and move-only types) requires changes to
    104       almost every class and function, essentially amounting to a rewrite.
    105       Faced with a rewrite, we decided to start from scratch and evaluate every
    106       design decision from first principles based on experience.</p>
    107 
    108       <p>Further, both projects are apparently abandoned: STLport 5.2.1 was
    109       released in Oct'08, and STDCXX 4.2.1 in May'08.</p>
    110 
    111     </ul>
    112 
    113   <!--=====================================================================-->
    114   <h2 id="requirements">Platform Support</h2>
    115   <!--=====================================================================-->
    116 
    117   <p>
    118     libc++ is known to work on the following platforms, using g++ and
    119     clang. Note that functionality provided by &lt;atomic&gt; is only functional with
    120     clang.
    121   </p>
    122 
    123   <ul>
    124     <li>Mac OS X i386</li>
    125     <li>Mac OS X x86_64</li>
    126     <li>FreeBSD 10+ i386</li>
    127     <li>FreeBSD 10+ x86_64</li>
    128     <li>FreeBSD 10+ ARM</li>
    129     <li>Linux i386</li>
    130     <li>Linux x86_64</li>
    131   </ul>
    132 
    133   <!--=====================================================================-->
    134   <h2 id="dir-structure">Current Status</h2>
    135   <!--=====================================================================-->
    136 
    137    <p>libc++ is a 100% complete C++11 implementation on Apple's OS X. </p>
    138    <p>LLVM and Clang can self host in C++ and C++11 mode with libc++ on Linux.</p>
    139    <p>libc++ is also a 100% complete C++14 implementation. A list of new features and
    140       changes for C++14 can be found <a href="cxx1y_status.html">here</a>.</p>
    141    <p>libc++'s C++17 implementation is not yet complete. A list of features and changes
    142       for C++17 can be found <a href="cxx1z_status.html">here</a>.</p>
    143    <p>A list of features and changes for the next C++ standard, known here as
    144       "C++2a" (probably to be C++20) can be found <a href="cxx2a_status.html">here</a>.</p>
    145    <p>Implementation of the post-C++14 Technical Specifications is in progress. A list of features
    146       and the current status of these features can be found <a href="ts1z_status.html">here</a>.</p>
    147    <p>As features get moved from the Technical Specifications into the main standard, we
    148       will (after a period for migration) remove them from the TS implementation. This
    149       process is detailed <a href="TS_deprecation.html">here</a>.</p>
    150 
    151    <!--======================================================================-->
    152    <h2 id="buildbots">Build Bots</h2>
    153    <!--======================================================================-->
    154    <p>The latest libc++ build results can be found at the following locations.</p>
    155    <ul>
    156       <li><a href="http://lab.llvm.org:8011/console">
    157         Buildbot libc++ builders
    158       </a></li>
    159       <li><a href="http://lab.llvm.org:8080/green/view/Libcxx/">
    160         Jenkins libc++ builders
    161       </a></li>
    162     </ul>
    163 
    164   <!--=====================================================================-->
    165   <h2>Get it and get involved!</h2>
    166   <!--=====================================================================-->
    167 
    168   <p>First please review our
    169      <a href="https://llvm.org/docs/DeveloperPolicy.html">Developer's Policy</a>.
    170 
    171     The documentation for building and using libc++ can be found below.
    172     <ul>
    173       <li><a href="https://libcxx.llvm.org/docs/UsingLibcxx.html">
    174         <b>Using libc++</b></a>
    175           Documentation on using the library in your programs</li>
    176       <li><a href="https://libcxx.llvm.org/docs/BuildingLibcxx.html">
    177         <b>Building libc++</b></a>
    178           Documentation on building the library using CMake</li>
    179       <li><a href="https://libcxx.llvm.org/docs/TestingLibcxx.html">
    180         <b>Testing libc++</b></a>
    181           Documentation for developers wishing to test the library</li>
    182     </ul>
    183 
    184   <!--=====================================================================-->
    185   <h3>Notes and Known Issues</h3>
    186   <!--=====================================================================-->
    187 
    188   <p>
    189     <ul>
    190       <li>
    191         Building libc++ with <code>-fno-rtti</code> is not supported. However
    192         linking against it with <code>-fno-rtti</code> is supported.
    193       </li>
    194       <li>
    195         On OS X v10.8 and older the CMake option
    196         <code>-DLIBCXX_LIBCPPABI_VERSION=""</code> must be used during
    197         configuration.
    198       </li>
    199     </ul>
    200   </p>
    201 
    202   <p>Send discussions to the
    203     <a href="https://lists.llvm.org/mailman/listinfo/libcxx-dev">libc++ mailing list</a>.</p>
    204 
    205   <!--=====================================================================-->
    206   <h2>Bug reports and patches</h2>
    207   <!--=====================================================================-->
    208 
    209   <p>
    210   If you think you've found a bug in libc++, please report it using
    211   the <a href="https://bugs.llvm.org/">LLVM Bugzilla</a>. If you're not sure, you
    212   can post a message to the <a href="https://lists.llvm.org/mailman/listinfo/libcxx-dev">libcxx-dev</a>
    213   mailing list or on IRC.
    214   </p>
    215 
    216   <p>
    217   If you want to contribute a patch to libc++, the best place for that is
    218   <a href="https://llvm.org/docs/Phabricator.html">Phabricator</a>. Please
    219   add libcxx-commits as a subscriber.
    220   </p>
    221 
    222   <!--=====================================================================-->
    223   <h2>Design Documents</h2>
    224   <!--=====================================================================-->
    225 
    226 <ul>
    227 <li><a href="atomic_design.html"><tt>&lt;atomic&gt;</tt></a></li>
    228 <li><a href="type_traits_design.html"><tt>&lt;type_traits&gt;</tt></a></li>
    229 <li><a href="https://cplusplusmusings.wordpress.com/2012/07/05/clang-and-standard-libraries-on-mac-os-x/">Excellent notes by Marshall Clow</a></li>
    230 </ul>
    231 
    232 </div>
    233 </body>
    234 </html>
    235