Home | History | Annotate | Download | only in docs
      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    UsingLibcxx
     38    BuildingLibcxx
     39    TestingLibcxx
     40 
     41 
     42 Current Status
     43 --------------
     44 
     45 After its initial introduction, many people have asked "why start a new
     46 library instead of contributing to an existing library?" (like Apache's
     47 libstdcxx, GNU's libstdc++, STLport, etc).  There are many contributing
     48 reasons, but some of the major ones are:
     49 
     50 * From years of experience (including having implemented the standard
     51   library before), we've learned many things about implementing
     52   the standard containers which require ABI breakage and fundamental changes
     53   to how they are implemented.  For example, it is generally accepted that
     54   building std::string using the "short string optimization" instead of
     55   using Copy On Write (COW) is a superior approach for multicore
     56   machines (particularly in C++11, which has rvalue references).  Breaking
     57   ABI compatibility with old versions of the library was
     58   determined to be critical to achieving the performance goals of
     59   libc++.
     60 
     61 * Mainline libstdc++ has switched to GPL3, a license which the developers
     62   of libc++ cannot use.  libstdc++ 4.2 (the last GPL2 version) could be
     63   independently extended to support C++11, but this would be a fork of the
     64   codebase (which is often seen as worse for a project than starting a new
     65   independent one).  Another problem with libstdc++ is that it is tightly
     66   integrated with G++ development, tending to be tied fairly closely to the
     67   matching version of G++.
     68 
     69 * STLport and the Apache libstdcxx library are two other popular
     70   candidates, but both lack C++11 support.  Our experience (and the
     71   experience of libstdc++ developers) is that adding support for C++11 (in
     72   particular rvalue references and move-only types) requires changes to
     73   almost every class and function, essentially amounting to a rewrite.
     74   Faced with a rewrite, we decided to start from scratch and evaluate every
     75   design decision from first principles based on experience.
     76   Further, both projects are apparently abandoned: STLport 5.2.1 was
     77   released in Oct'08, and STDCXX 4.2.1 in May'08.
     78 
     79 Platform and Compiler Support
     80 -----------------------------
     81 
     82 libc++ is known to work on the following platforms, using gcc-4.2 and
     83 clang  (lack of C++11 language support disables some functionality).
     84 Note that functionality provided by ``<atomic>`` is only functional with clang
     85 and GCC.
     86 
     87 ============ ==================== ============ ========================
     88 OS           Arch                 Compilers    ABI Library
     89 ============ ==================== ============ ========================
     90 Mac OS X     i386, x86_64         Clang, GCC   libc++abi
     91 FreeBSD 10+  i386, x86_64, ARM    Clang, GCC   libcxxrt, libc++abi
     92 Linux        i386, x86_64         Clang, GCC   libc++abi
     93 ============ ==================== ============ ========================
     94 
     95 The following minimum compiler versions are strongly recommended.
     96 
     97 * Clang 3.5 and above
     98 * GCC 4.7 and above.
     99 
    100 Anything older *may* work.
    101 
    102 C++ Dialect Support
    103 ---------------------
    104 
    105 * C++11 - Complete
    106 * `C++14 - Complete <http://libcxx.llvm.org/cxx1y_status.html>`__
    107 * `C++1z - In Progress <http://libcxx.llvm.org/cxx1z_status.html>`__
    108 * `Post C++14 Technical Specifications - In Progress <http://libcxx.llvm.org/ts1z_status.html>`__
    109 
    110 Notes and Known Issues
    111 ----------------------
    112 
    113 This list contains known issues with libc++
    114 
    115 * Building libc++ with ``-fno-rtti`` is not supported. However
    116   linking against it with ``-fno-rtti`` is supported.
    117 * On OS X v10.8 and older the CMake option ``-DLIBCXX_LIBCPPABI_VERSION=""``
    118   must be used during configuration.
    119 
    120 
    121 A full list of currently open libc++ bugs can be `found here`__.
    122 
    123 .. __:  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
    124 
    125 Design Documents
    126 ----------------
    127 
    128 .. toctree::
    129    :maxdepth: 1
    130 
    131    DesignDocs/DebugMode
    132    DesignDocs/CapturingConfigInfo
    133    DesignDocs/ABIVersioning
    134    DesignDocs/VisibilityMacros
    135    DesignDocs/ThreadingSupportAPI
    136 
    137 * `<atomic> design <http://libcxx.llvm.org/atomic_design.html>`_
    138 * `<type_traits> design <http://libcxx.llvm.org/type_traits_design.html>`_
    139 * `Notes by Marshall Clow`__
    140 
    141 .. __: https://cplusplusmusings.wordpress.com/2012/07/05/clang-and-standard-libraries-on-mac-os-x/
    142 
    143 Build Bots and Test Coverage
    144 ----------------------------
    145 
    146 * `LLVM Buildbot Builders <http://lab.llvm.org:8011/console>`_
    147 * `Apple Jenkins Builders <http://lab.llvm.org:8080/green/view/Libcxx/>`_
    148 * `EricWF's Nightly Builders <http://ds2.efcs.ca:8080/console>`_
    149 * `Code Coverage Results <http://efcs.ca/libcxx-coverage>`_
    150 
    151 Getting Involved
    152 ================
    153 
    154 First please review our `Developer's Policy <http://llvm.org/docs/DeveloperPolicy.html>`__
    155 and `Getting started with LLVM <http://llvm.org/docs/GettingStarted.html>`__.
    156 
    157 **Bug Reports**
    158 
    159 If you think you've found a bug in libc++, please report it using
    160 the `LLVM Bugzilla`_. If you're not sure, you
    161 can post a message to the `cfe-dev mailing list`_ or on IRC.
    162 Please include "libc++" in your subject.
    163 
    164 **Patches**
    165 
    166 If you want to contribute a patch to libc++, the best place for that is
    167 `Phabricator <http://llvm.org/docs/Phabricator.html>`_. Please include [libcxx] in the subject and
    168 add `cfe-commits` as a subscriber. Also make sure you are subscribed to the
    169 `cfe-commits mailing list <http://lists.llvm.org/mailman/listinfo/cfe-commits>`_.
    170 
    171 **Discussion and Questions**
    172 
    173 Send discussions and questions to the
    174 `cfe-dev mailing list <http://lists.llvm.org/mailman/listinfo/cfe-dev>`_.
    175 Please include [libcxx] in the subject.
    176 
    177 
    178 
    179 Quick Links
    180 ===========
    181 * `LLVM Homepage <http://llvm.org/>`_
    182 * `libc++abi Homepage <http://libcxxabi.llvm.org/>`_
    183 * `LLVM Bugzilla <https://bugs.llvm.org/>`_
    184 * `cfe-commits Mailing List`_
    185 * `cfe-dev Mailing List`_
    186 * `Browse libc++ -- SVN <http://llvm.org/svn/llvm-project/libcxx/trunk/>`_
    187 * `Browse libc++ -- ViewVC <http://llvm.org/viewvc/llvm-project/libcxx/trunk/>`_
    188