[libcxx-commits] [libcxx] 195015c - [libc++][doc] Improves contribution page.

Mark de Wever via libcxx-commits libcxx-commits at lists.llvm.org
Tue Aug 29 10:14:10 PDT 2023


Author: Mark de Wever
Date: 2023-08-29T19:05:31+02:00
New Revision: 195015cf67c64e7eaca8dff51c58794c3b117753

URL: https://github.com/llvm/llvm-project/commit/195015cf67c64e7eaca8dff51c58794c3b117753
DIFF: https://github.com/llvm/llvm-project/commit/195015cf67c64e7eaca8dff51c58794c3b117753.diff

LOG: [libc++][doc] Improves contribution page.

This adds more information regarding the libc++ coding style and
reference that are useful when working on a standard library
implementation.

This information is based on review comments and tips I give to new
contributors an information I wish I'd know when I started working on
libc++.

Depends on D156051

Reviewed By: #libc, jloser, var-const, ldionne

Differential Revision: https://reviews.llvm.org/D156052

Added: 
    

Modified: 
    libcxx/docs/Contributing.rst

Removed: 
    


################################################################################
diff  --git a/libcxx/docs/Contributing.rst b/libcxx/docs/Contributing.rst
index 3e3032ece99e47..5790c0c41f0a59 100644
--- a/libcxx/docs/Contributing.rst
+++ b/libcxx/docs/Contributing.rst
@@ -34,6 +34,123 @@ This will ensure that you work in a direction that the project endorses and will
 contribution as directional questions can be raised early. Including a WIP patch is not mandatory, but
 it can be useful to ground the discussion in something concrete.
 
+Coding standards
+================
+
+In general, libc++ follows the
+`LLVM Coding Standards <https://llvm.org/docs/CodingStandards.html>`_.
+There are some deviations from these standards.
+
+Libc++ uses ``__ugly_names``. These names are reserved for implementations, so
+users may not use them in their own applications. When using a name like ``T``,
+a user may have defined a macro that changes the meaning of ``T``. By using
+``__ugly_names`` we avoid that problem. Other standard libraries and compilers
+use these names too. To avoid common clashes with other uglified names used in
+other implementations (e.g. system headers), the test in
+``libcxx/test/libcxx/system_reserved_names.gen.py`` contains the list of
+reserved names that can't be used.
+
+Unqualified function calls are susceptible to
+`argument-dependent lookup (ADL) <https://en.cppreference.com/w/cpp/language/adl>`_.
+This means calling ``move(UserType)`` might not call ``std::move``. Therefore,
+function calls must use qualified names to avoid ADL. Some functions in the
+standard library `require ADL usage <http://eel.is/c++draft/contents#3>`_.
+Names of classes, variables, concepts, and type aliases are not subject to ADL.
+They don't need to be qualified.
+
+Function overloading also applies to operators. Using ``&user_object`` may call
+a user-defined ``operator&``. Use ``std::addressof`` instead. Similarly, to
+avoid invoking a user-defined ``operator,``, make sure to cast the result to
+``void`` when using the ``,``. For example:
+
+.. code-block:: cpp
+
+    for (; __first1 != __last1; ++__first1, (void)++__first2) {
+      ...
+    }
+
+In general, try to follow the style of existing code. There are a few
+exceptions:
+
+- ``_VSTD::foo`` is no longer used in new code. Use ``std::foo`` instead.
+- ``_LIBCPP_INLINE_VISIBILITY`` is no longer used in new code. Use
+  ``_LIBCPP_HIDE_FROM_ABI`` instead.
+- Prefer ``using foo = int`` over ``typedef int foo``. The compilers supported
+  by libc++ accept alias declarations in all standard modes.
+
+Other tips are:
+
+- Keep the number of formatting changes in patches minimal.
+- Provide separate patches for style fixes and for bug fixes or features. Keep in
+  mind that large formatting patches may cause merge conflicts with other patches
+  under review. In general, we prefer to avoid large reformatting patches.
+- Keep patches self-contained. Large and/or complicated patches are harder to
+  review and take a significant amount of time. It's fine to have multiple
+  patches to implement one feature if the feature can be split into
+  self-contained sub-tasks.
+
+
+Resources
+=========
+
+Libc++ specific
+---------------
+
+- ``libcxx/include/__config`` -- this file contains the commonly used
+  macros in libc++. Libc++ supports all C++ language versions. Newer versions
+  of the Standard add new features. For example, making functions ``constexpr``
+  in C++20 is done by using ``_LIBCPP_CONSTEXPR_SINCE_CXX20``. This means the
+  function is ``constexpr`` in C++20 and later. The Standard does not allow
+  making this available in C++17 or earlier, so we use a macro to implement
+  this requirement.
+- ``libcxx/test/support/test_macros.h`` -- similar to the above, but for the
+  test suite.
+
+
+ISO C++ Standard
+----------------
+
+Libc++ implements the library part of the ISO C++ standard. The official
+publication must be bought from ISO or your national body. This is not
+needed to work on libc++, there are other free resources available.
+
+- The `LaTeX sources <https://github.com/cplusplus/draft>`_  used to
+  create the official C++ standard. This can be used to create your own
+  unofficial build of the standard.
+
+- An `HTML rendered version of the draft <https://eel.is/c++draft/>`_  is
+  available. This is the most commonly used place to look for the
+  wording of the standard.
+
+- An `alternative <https://github.com/timsong-cpp/cppwp>`_ is available.
+  This link has both recent and historic versions of the standard.
+
+- When implementing features, there are
+  `general requirements <https://eel.is/c++draft/#library>`_.
+  Most papers use this
+  `jargon <http://eel.is/c++draft/structure#specifications>`_
+  to describe how library functions work.
+
+- The `WG21 redirect service <https://wg21.link/>`_ is a tool to quickly locate
+  papers, issues, and wording in the standard.
+
+- The `paper trail <https://github.com/cplusplus/papers/issues>`_ of
+  papers is publicly available, including the polls taken. It
+  contains links to the minutes of paper's discussion. Per ISO rules,
+  these minutes are only accessible by members of the C++ committee.
+
+- `Feature-Test Macros and Policies
+  <https://isocpp.org/std/standing-documents/sd-6-sg10-feature-test-recommendations>`_
+  contains information about feature-test macros in C++.
+  It contains a list with all feature-test macros, their versions, and the paper
+  that introduced them.
+
+- `cppreference <https://en.cppreference.com/w/>`_ is a good resource
+  for the usage of C++ library and language features. It's easier to
+  read than the C++ Standard, but it lacks details needed to properly implement
+  library features.
+
+
 Pre-commit check list
 =====================
 


        


More information about the libcxx-commits mailing list