libcxx

libcxx mirror with random patches
git clone https://git.neptards.moe/neptards/libcxx.git
Log | Files | Refs

index.rst (6890B)


      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    ReleaseNotes
     38    UsingLibcxx
     39    BuildingLibcxx
     40    TestingLibcxx
     41 
     42 
     43 .. toctree::
     44     :hidden:
     45 
     46     FeatureTestMacroTable
     47 
     48 Current Status
     49 --------------
     50 
     51 After its initial introduction, many people have asked "why start a new
     52 library instead of contributing to an existing library?" (like Apache's
     53 libstdcxx, GNU's libstdc++, STLport, etc).  There are many contributing
     54 reasons, but some of the major ones are:
     55 
     56 * 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++.
     66 
     67 * 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++.
     74 
     75 * 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.
     84 
     85 Platform and Compiler Support
     86 -----------------------------
     87 
     88 libc++ is known to work on the following platforms, using gcc and
     89 clang.
     90 Note that functionality provided by ``<atomic>`` is only functional with clang
     91 and GCC.
     92 
     93 ============ ==================== ============ ========================
     94 OS           Arch                 Compilers    ABI Library
     95 ============ ==================== ============ ========================
     96 Mac OS X     i386, x86_64         Clang, GCC   libc++abi
     97 FreeBSD 10+  i386, x86_64, ARM    Clang, GCC   libcxxrt, libc++abi
     98 Linux        i386, x86_64         Clang, GCC   libc++abi
     99 ============ ==================== ============ ========================
    100 
    101 The following minimum compiler versions are strongly recommended.
    102 
    103 * Clang 3.5 and above
    104 * GCC 4.7 and above.
    105 
    106 Anything older *may* work.
    107 
    108 C++ Dialect Support
    109 ---------------------
    110 
    111 * C++11 - Complete
    112 * `C++14 - Complete <http://libcxx.llvm.org/cxx1y_status.html>`__
    113 * `C++17 - In Progress <http://libcxx.llvm.org/cxx1z_status.html>`__
    114 * `Post C++14 Technical Specifications - In Progress <http://libcxx.llvm.org/ts1z_status.html>`__
    115 * :ref:`C++ Feature Test Macro Status <feature-status>`
    116 
    117 Notes and Known Issues
    118 ----------------------
    119 
    120 This 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.
    124 * On OS X v10.8 and older the CMake option ``-DLIBCXX_LIBCPPABI_VERSION=""``
    125   must be used during configuration.
    126 
    127 
    128 A full list of currently open libc++ bugs can be `found here`__.
    129 
    130 .. __:  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
    131 
    132 Design Documents
    133 ----------------
    134 
    135 .. toctree::
    136    :maxdepth: 1
    137 
    138    DesignDocs/AvailabilityMarkup
    139    DesignDocs/DebugMode
    140    DesignDocs/CapturingConfigInfo
    141    DesignDocs/ABIVersioning
    142    DesignDocs/VisibilityMacros
    143    DesignDocs/ThreadingSupportAPI
    144    DesignDocs/FileTimeType
    145    DesignDocs/FeatureTestMacros
    146 
    147 * `<atomic> design <http://libcxx.llvm.org/atomic_design.html>`_
    148 * `<type_traits> design <http://libcxx.llvm.org/type_traits_design.html>`_
    149 * `Notes by Marshall Clow`__
    150 
    151 .. __: https://cplusplusmusings.wordpress.com/2012/07/05/clang-and-standard-libraries-on-mac-os-x/
    152 
    153 Build Bots and Test Coverage
    154 ----------------------------
    155 
    156 * `LLVM Buildbot Builders <http://lab.llvm.org:8011/console>`_
    157 * `Apple Jenkins Builders <http://lab.llvm.org:8080/green/view/Libcxx/>`_
    158 * `Windows Appveyor Builders <https://ci.appveyor.com/project/llvm-mirror/libcxx>`_
    159 * `Code Coverage Results <http://efcs.ca/libcxx-coverage>`_
    160 
    161 Getting Involved
    162 ================
    163 
    164 First please review our `Developer's Policy <http://llvm.org/docs/DeveloperPolicy.html>`__
    165 and `Getting started with LLVM <http://llvm.org/docs/GettingStarted.html>`__.
    166 
    167 **Bug Reports**
    168 
    169 If you think you've found a bug in libc++, please report it using
    170 the `LLVM Bugzilla`_. If you're not sure, you
    171 can post a message to the `libcxx-dev mailing list`_ or on IRC.
    172 
    173 **Patches**
    174 
    175 If you want to contribute a patch to libc++, the best place for that is
    176 `Phabricator <http://llvm.org/docs/Phabricator.html>`_. Please add `libcxx-commits` as a subscriber.
    177 Also make sure you are subscribed to the `libcxx-commits mailing list <http://lists.llvm.org/mailman/listinfo/libcxx-commits>`_.
    178 
    179 **Discussion and Questions**
    180 
    181 Send discussions and questions to the
    182 `libcxx-dev mailing list <http://lists.llvm.org/mailman/listinfo/libcxx-dev>`_.
    183 
    184 
    185 
    186 Quick Links
    187 ===========
    188 * `LLVM Homepage <http://llvm.org/>`_
    189 * `libc++abi Homepage <http://libcxxabi.llvm.org/>`_
    190 * `LLVM Bugzilla <https://bugs.llvm.org/>`_
    191 * `libcxx-commits Mailing List`_
    192 * `libcxx-dev Mailing List`_
    193 * `Browse libc++ -- SVN <http://llvm.org/svn/llvm-project/libcxx/trunk/>`_
    194 * `Browse libc++ -- ViewVC <http://llvm.org/viewvc/llvm-project/libcxx/trunk/>`_